SimpleModal - 在同一元素上调用“modal()”

时间:2011-03-23 14:15:08

标签: jquery simplemodal

我有一个页面,我希望在其中有几个由SimpleModal实现的模态窗口的实例。具体情况如下:

  1. 页面已加载。
  2. 用户点击按钮打开模态窗口。
  3. 在模态中,用户插入(输入)所需的所有信息。
  4. 验证数据。 如果验证失败,则新模式应显示错误。这个概念是有一个模态窗口应该像javascript alert()函数一样工作。
  5. 当错误可见时,之前的模式应该消失。一旦用户点击OK,错误就会消失,旧的模态应该出现。
  6. 现在,我已经找到了答案,我看到了Eric Martin(SimpleModal的开发者)的几篇文章,谈论了多个模态窗口。似乎SimpleModal不支持它,他建议的是用新的内容替换模态的内容。

    我要做的是:

    1. 在我显示提醒之前,我保留了开放模式的ID。
    2. 隐藏所有打开的模态(隐藏div)。
    3. 显示提示并绑定确定按钮。
    4. 当用户点击OK时,我关闭当前模式(警报),获取旧div的名称,并通过调用ShowDialog(“getSubsidiariesForCustomer”)再次显示它。
    5. 我的问题是,当我尝试运行最后一个命令时,它不起作用。在调查之后,如果在某个元素上调用了modal()函数,那么SimpleModal插件的实现似乎会保留一个标志。

      仅为一般知识:

      1. 我正在使用简单的模态1.41
      2. 好像我在JS中的第216行:

        //不允许多次通话 if(s.d.data){     返回false; }

      3. 我的代码就在本节之后: 我首先运行“jBtnNew_Click”的逻辑:

        Admin.BL.SettingsPage.jBtnNew_Click=function(e)
        {
            Admin.BL.EcmSettings.ShowDialog("#getSubsidiariesForCustomer");
            alert(""); //Just for debugging
            Admin.BL.EcmSettings.ShowAlert();
        }
        
        Admin.BL.SettingsPage.ShowAlert=function()
        {
            var id = $("div.model:visible").eq(0).attr("id");
            $("#alertBtnOk").one("click", function(e){
                $.modal.close();
                if (id != undefined)
                {
                    Admin.BL.SettingsPage.ShowDialog(id);
                }
            }
            );
            Admin.BL.SettingsPage.ShowDialog("#alert");
        }
        
        Admin.BL.SettingsPage.ShowDialog=function(dialogId)
        {
            if (dialogId.indexOf("#") < 0)
            {
                dialogId = "#" + dialogId;
            }
            $("div.model").hide();
            $("#dialog").modal({position:new Array("20%"),
            overlayId:"dialog-overlay",
            containerId:"confirm-container"});
            $(dialogId).show();
        }
        

        这是我的HTML:

                                              获取客户的子公司                                                               顾客ID:                                                                   顾客姓名:                                                                                                                                                                                                           这是我的警报                                                                                                                   

        欢迎任何有关解决此问题的帮助!!

        谢谢:)

1 个答案:

答案 0 :(得分:2)

我认为您的问题(#4)可能与我在SimpleModal中使用的setTimeout代码一起处理Opera问题。我需要将其删除,但是现在您可以通过查找以下内容来尝试编辑SimpleModal源:

setTimeout(function(){
    // opera work-around
    s.d.overlay.remove();

    // reset the dialog object
    s.d = {};
}, 10);

将其替换为:

s.d.overlay.remove();
// reset the dialog object
s.d = {};

如果这对您不起作用,请告诉我......