jquery ui Dialog:在初始化之前无法在对话框上调用方法

cor*_*.io 96 jquery dialog jquery-ui-dialog

我有一个关于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");
...    
Run Code Online (Sandbox Code Playgroud)

HTML代码

<div id="divDialog">
<div id="divInDialog"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

知道为什么会这样吗?

Kne*_*ZOD 129

试试这个

$(document).ready(function() {
  $("#divDialog").dialog(opt).dialog("open");
});
Run Code Online (Sandbox Code Playgroud)

你也可以这样做:

var theDialog = $("#divDialog").dialog(opt);
theDialog.dialog("open");
Run Code Online (Sandbox Code Playgroud)

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

  • 这对我有用.每次我想要打开它或者只是第一次打开时,我是否必须初始化对话框?有很多对话框.是不是无法设置选项initiali然后通过按钮打开对话框? (5认同)
  • 我发现这个解决方案还解决了"无法在初始化之前调用对话框上的方法;尝试调用方法'打开'"错误,该错误发生在对话框成功打开,关闭,然后用户尝试再次打开对话框时.谢谢@ZOD (5认同)
  • @IgorLacik我假设.dialog()返回自身的一个实例,因此您可以执行链接。因此.dialog(opt).dialog('open')实例化一个对话框对象(第一个调用),然后对其执行'open'。我假设然后调用$(obj).dialog(opt)然后再调用$(obj).dialog('open')将实例化jquery对象上的单独对话框对象,因此第二个对象看不到第一个对象配置选项。如果不深入研究对话框代码,就很难确定,而且我没有时间:D (2认同)

Cym*_*men 22

如果你无法升级jQuery而且你得到:

Uncaught Error: cannot call methods on dialog prior to initialization; attempted to call method 'close'
Run Code Online (Sandbox Code Playgroud)

你可以像这样解决它:

$(selector).closest('.ui-dialog-content').dialog('close');
Run Code Online (Sandbox Code Playgroud)

或者,如果您控制视图并且不知道整个页面上根本不应该使用其他对话框,则可以执行以下操作:

$('.ui-dialog-content').dialog('close');
Run Code Online (Sandbox Code Playgroud)

如果使用closest导致性能问题,我只建议这样做.如果不对所有对话框进行全局关闭,可能还有其他方法可以解决这个问题.


joh*_*eur 9

当我只更新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版本,我相信你会没事的,但是当你开始使用不同的版本时,你会走出这条路,并得到这样的错误.所以,总而言之,这个错误来自错误匹配的版本(无论如何我都是这样).

  • 我通过将我的jquery ui版本升级到1.9.2解决了这个问题,然后就可以了.所以,jquery 1.9.1与jquery ui 1.9.2摆脱了上面的错误. (4认同)

Tom*_*min 5

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

if (modalDialogObj.hasClass('ui-dialog-content')) {
    // call UI methods like modalDialogObj.dialog('isOpen')
} else {
    // it is not initialized yet
}
Run Code Online (Sandbox Code Playgroud)