57

我想使用instance方法来测试 jQuery UI 对话框小部件是否已初始化。关于API,这是可能的,但它对我不起作用:

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

演示:http: //jsfiddle.net/mDbV7/

更新:

这是文档中的错误,instance方法将从版本 1.11.0 开始提供,请参阅此问题

4

7 回答 7

92

最新版本的 jQuery UI 不再允许您在尚未初始化的项目上调用 UI 方法。我刚刚将它们包装在 if 语句中,例如:

if ($("#divToBeDialoged").hasClass('ui-dialog-content')) {
    // do whatever
} else {
    // it is not initialized yet
}

编辑:更改班级名称,谢谢@dmnc

于 2013-04-02T12:20:25.957 回答
20

使用完对话框后,清空和销毁对话框也是一个好习惯。我通常在每个对话框的关闭事件中使用此代码

$("#myDialog").dialog({
    // other options
    close: function(event, ui) {
        $(this).empty().dialog('destroy');
    }
}

这是我的建议,而不是每次都询问实例中是否存在对话框,请确保每个对话框都自行清理。

于 2013-09-05T05:18:54.333 回答
5

您可以使用:

if($('#id').is(':ui-dialog')) {
}

或者

    var obj = $('<div>test</div>').dialog();
    if (obj.is(':ui-dialog')) {
      alert('I\'m a dialog')
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>

于 2015-09-23T09:32:31.587 回答
1

如果您从 html 代码中的现有 id 制作该对话框,例如以下示例:

$('#main').dialog({});

请注意,dialog()将类添加到为它工作而生成ui-dialog<div>父元素中。在#main元素处,添加的类dialog()是:ui-dialog-contentui-widget-content(在 jquery-ui-1.9.2 中)。因此,在这种情况下,按照@jbabey 中的示例,您可以检查现有对话框的执行情况:

if ($('#main').hasClass('ui-dialog-content')) {
    // do whatever
}
于 2013-08-29T12:51:23.980 回答
1
     if ($('#update').is(':data(dialog)')) 
     {
              //#update has dialog
     }
     else
     {
              //#update does't have dialog
     }
于 2014-04-11T07:01:43.400 回答
1

对于 jQuery UI - v1.10.3

if($( "#myDialog" ).is(':data(uiDialog)')){//is(':data(dialog)') does not work
    //Dialog exist
}
于 2014-10-30T05:48:55.417 回答
0

另一种方法是

$('.element').is(':data(dialog)');
于 2013-04-02T12:29:49.743 回答