jQuery UI对话框 - 检查是否存在实例方法

时间:2013-04-02 12:17:17

标签: jquery-ui-dialog

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

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

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

更新

这是文档中的错误,版本1.11.0中将提供instance方法,请参阅this issue

7 个答案:

答案 0 :(得分:87)

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

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

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

答案 1 :(得分:18)

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

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

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

答案 2 :(得分:5)

您可以使用:

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



    var obj = $('<div>test</div>').dialog();
    if (obj.is(':ui-dialog')) {
      alert('I\'m a dialog')
    }
&#13;
<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>
&#13;
&#13;
&#13;

答案 3 :(得分: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
}

答案 4 :(得分:1)

     if ($('#update').is(':data(dialog)')) 
     {
              //#update has dialog
     }
     else
     {
              //#update does't have dialog
     }

答案 5 :(得分:1)

对于jQuery UI - v1.10.3

if($( "#myDialog" ).is(':data(uiDialog)')){//is(':data(dialog)') does not work
    //Dialog exist
}

答案 6 :(得分:0)

另一种方式是

$('.element').is(':data(dialog)');