【问题标题】:jquery UI dialog opens multiple timesjquery UI 对话框多次打开
【发布时间】:2012-03-20 21:09:47
【问题描述】:

我的 jquery UI 对话框在其自身之上多次加载时遇到问题:

click -> opens dialog(1 time) -> close dialog
click - > opens dialog(2 times) -> close dialog
click - > opens dialog(4 times) -> close dialog
click - > opens dialog(8 times) -> close dialog

正是这里描述的内容:Why does my modal jQuery dialog open multiple times?

我遵循的解决方案对那个人有效,但对我无效。对那个人有效的解决方案是:

1) 在函数外初始化对话框 2) 仅在 load() 成功回调时打开

如您所见,我在下面的代码中做了这两件事,但问题仍然存在。请帮忙: (顺便说一句,一般结构是我在单击链接时加载一个对话框。然后当单击该对话框中的注册按钮时,我在其顶部加载另一个小的确认对话框,并带有一个关闭两个对话框的 OK 按钮。)

$(document).ready(){
   var $registerDialogHandle = null;
    var $registerStatusDialogHandle = null;

    $registerDialogHandle = $('<div></div>').html("").dialog({
        autoOpen: false, modal: true,  width: 470, height: 552,
        buttons: {
            "Register": function () {
                if ($('#registerForm').validate().form()) {
                    $.ajax({
                        ...ajax settings...
                        success: function () {
                            openInDialog($registerStatusDialogHandle, "/Account/RegisterStatus");
                        }
                    });
                }
            }
        }
    });

    $registerStatusDialogHandle = $('<div></div>').html("").dialog({
        autoOpen: false, modal: true, width: 365, height: 165,
        buttons: {
            "OK": function () {
                $(this).dialog("close");
                $registerDialogHandle.dialog("close");
            }
        }
    });

    $('.registerLink').live("click", function () {
        openInDialog($registerDialogHandle, "/Account/Register?path=_RegisterPartial");
    });
} /*End of document.ready()*/

function openInDialog(dialog, target) {
    var $url = target;
    var $dialog = dialog;
    $dialog.empty();
    $dialog.dialog("option", "position", "center").load($url, function () {
         $dialog.dialog("open");
    });
}

【问题讨论】:

  • 由于您没有重新创建对话框,因此您不需要删除它们。这段代码是否在多次运行的其他函数中?
  • 好的,我删除了 remove() 调用。不,它不在任何其他功能内。一切都直接在 $(document).ready 除了直接在它之外的 openInDialog 函数之外。我下载了一个与 js 括号匹配的 Visual Studio 扩展。

标签: jquery user-interface dialog load


【解决方案1】:

如果我将 .remove() 调用更改为 .hide() 调用,这里似乎可以正常工作:

http://jsfiddle.net/jtbowden/s6SxE/

【讨论】:

  • 我终于想通了。由于这一行,它正在加载重复: openInDialog($registerDialogHandle, "/Account/Register?path=_RegisterPartial");问题在于部分视图本身,我已将该脚本加载到布局页面和部分视图中,因此重复是由于脚本本身存在于 2 个地方。非常感谢您的帮助,jsfiddle 非常有助于将问题隔离到完全不同的东西上。 ciao
  • 啊。说得通。很高兴你明白了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 2017-04-29
  • 1970-01-01
  • 2011-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多