111

我在 jquery 1.5 上有一个应用程序,对话框运行良好。虽然我有很多 .live 处理程序,但我将其更改为 .on。为此,我必须更新 jquery(现在是 1.8.3 和 jquerui 1.9.1)。

现在,我得到了:Error: cannot call methods on dialog prior to initialization; attempted to call method 'close'

以下是代码:

Javascript

var opt = {
        autoOpen: false,
        modal: true,
        width: 550,
        height:650,
        title: 'Details'
};

$(document).ready(function() {
$("#divDialog").dialog(opt);
    $("#divDialog").dialog("open");
...    

html代码

<div id="divDialog">
<div id="divInDialog"></div>
</div>

知道为什么会发生这种情况吗?

4

11 回答 11

145

试试这个

$(document).ready(function() {
  $("#divDialog").dialog(opt).dialog("open");
});

你也可以这样做:

var theDialog = $("#divDialog").dialog(opt);
theDialog.dialog("open");

这是因为对话框没有存储在 中$('#divDialog'),而是存储在一个动态创建并由.dialog(opt)函数返回的新 div 中。

于 2012-11-22T21:36:30.130 回答
27

如果你不能升级 jQuery 并且你得到:

Uncaught Error: cannot call methods on dialog prior to initialization; attempted to call method 'close'

您可以像这样解决它:

$(selector).closest('.ui-dialog-content').dialog('close');

或者,如果您控制视图并且知道整个页面上根本不应该使用其他对话框,您可以这样做:

$('.ui-dialog-content').dialog('close');

closest如果使用会导致性能问题,我只会建议这样做。可能有其他方法可以解决它,而无需对所有对话框进行全局关闭。

于 2013-11-19T22:44:20.020 回答
10

当我只更新 jquery 库而不并行更新 jqueryui 库时出现此错误。我使用 jquery 1.8.3 和 jqueryui 1.9.0。但是,当我将 jquery 1.8.3 更新到 1.9.1 时,我得到了上述错误。当我注释掉有问题的.close方法行时,它会抛出一个关于找不到的错误.browser在 jquery 1.8.3 中已弃用并从 jquery 1.9.1 中删除的 jquery 库中。所以基本上,jquery 1.9.1 库与 jquery ui 1.9.0 库不兼容,尽管 jquery ui 下载页面说它适用于 jquery 1.6+。本质上,在尝试使用两者的不同版本时存在未报告的错误。如果您使用与 jqueryui 下载捆绑在一起的 jquery 版本,我相信您会没事的,但是当您开始使用不同的版本时,您就会偏离常规并得到这样的错误。所以,总而言之,这个错误来自不匹配的版本(无论如何在我的情况下)。

于 2013-03-12T20:51:22.130 回答
4

所以你用这个:

var theDialog = $("#divDialog").dialog(opt);
theDialog.dialog("open");

如果在对话框中打开 MVC 部分视图,则可以在索引中创建隐藏按钮和 JQUERY 点击事件:

$("#YourButton").click(function()
{
   theDialog.dialog("open");
   OR
   theDialog.dialog("close");
});

然后在局部视图 html 中调用按钮触发单击,例如:

$("#YouButton").trigger("click")

拜拜。

于 2015-01-07T11:44:53.580 回答
4

新的 jQuery UI 版本将不允许您在未初始化的对话框上调用 UI 方法。作为一种解决方法,您可以使用以下检查来查看对话框是否处于活动状态。

if (modalDialogObj.hasClass('ui-dialog-content')) {
    // call UI methods like modalDialogObj.dialog('isOpen')
} else {
    // it is not initialized yet
}
于 2019-07-04T05:20:14.207 回答
2

如果想在Dialog初始化或者页面准备好后立即打开Dialog,也可以在dialog的options对象中设置参数autoOpen为:true

var opt = {
        autoOpen: true,
        modal: true,
        width: 550,
        height:650,
        title: 'Details'
};

因此,您不必调用 `$("#divDialog").dialog("open");

初始化对话框对象时,对话框会自动打开。

于 2015-08-11T13:40:16.453 回答
2

我的情况不同,由于“ this ”的范围而失败:

//this fails:
$("#My-Dialog").dialog({
  ...
  close: ()=>{
    $(this).dialog("close");
  }
});

//this works:
$("#My-Dialog").dialog({
  ...
  close: function(){
    $(this).dialog("close");
  }
});
于 2019-06-01T00:44:46.713 回答
0

这也是一些解决方法:

$("div[aria-describedby='divDialog'] .ui-button.ui-widget.ui-state-default.ui-corner-all.ui-button-icon-only.ui-dialog-titlebar-close").click();
于 2014-03-15T17:03:29.673 回答
0

我收到此错误消息是因为我在部分视图而不是父视图上有 div 标签

于 2015-03-31T15:28:29.520 回答
0

我只需将 ScriptManager 添加到页面中。问题解决了。

于 2018-03-14T17:36:49.933 回答
0

就我而言,问题是我$("#divDialog").removeData();在对话框中重置表单数据时调用了它。

这导致我清除了一个名为的数据结构uiDialog,这意味着对话框必须重新初始化。

.removeData()用更具体的删除替换,一切又开始工作了。

于 2018-10-12T15:31:26.557 回答