我想使用instance
方法测试jQuery UI Dialog小部件是否已初始化。关于API,这是可能的,但它对我不起作用:
Uncaught Error: cannot call methods on dialog prior to initialization; attempted to call method 'instance'
更新
这是文档中的错误,版本1.11.0中将提供instance
方法,请参阅this issue。
答案 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;
答案 3 :(得分:1)
如果您从html代码中的现有ID创建该对话框,例如:
$('#main').dialog({});
请注意,dialog()
在为其生成的ui-dialog
父元素中添加了类<div>
。在#main
元素,dialog()
添加的类是:ui-dialog-content
和ui-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)');