检测是否打开了jQuery UI对话框


97

我正在使用jQuery UI对话框。如果它是开放的,我想做一件事。如果关闭了,我想再做一遍。

我的问题是,如何检测jQuery UI对话框是否打开?

Answers:


173

如果您阅读文档。

$('#mydialog').dialog('isOpen')

此方法返回布尔值(true或false),而不是jQuery对象。


1
h!我不知道我怎么忽略了这一点。谢谢。
user208662

1
您将如何对所有对话框进行此测试?假设您有十个不同的对话框,分别具有不同的init和选项,并且要测试是否打开了其中任何一个对话框,而不是特定的选择器?
柯克·罗斯

在上述对话框中添加一个类,然后在isOpen检查中更改选择器。
Suipaste

1
还有:十个对话框?也许值得考虑的是通过重用一两个实例来减少这种情况
David

1
还要检查对话是否已使用初始化$("#mydialog").hasClass("ui-dialog-content")。见stackoverflow.com/questions/29528706/...
秋伦纳德

53

实际上,您必须将其显式比较为true。如果对话框尚不存在,它将不会返回false(如您所愿),它将返回一个DOM对象。

if ($('#mydialog').dialog('isOpen') === true) {
    // true
} else {
    // false
}

4
在最新的JQuery中返回false。
hoyhoy 2012年

1
您将如何对所有对话框进行此测试?假设您有十个不同的对话框,分别具有不同的init和选项,并且要测试是否打开了其中任何一个对话框,而不是特定的选择器?
柯克·罗斯

2
也许创建一个像$(“。ui-dialog”)。each(function(/ * check this dialog * /))这样的函数?
marcovtwout 2014年

21

如果要检查对话框是否在特定元素上打开,可以执行以下操作:

if ($('#elem').closest('.ui-dialog').is(':visible')) { 
  // do something
}

或者,如果您只想检查元素本身是否可见,则可以执行以下操作:

if ($('#elem').is(':visible')) { 
  // do something
}

要么...

if ($('#elem:visible').length) { 
  // do something
}

3
我检查自己的div是否未按以下方式初始化:$dialog.hasClass('ui-dialog-content')
Sergey 2015年

谢谢,我无法使用“ isOpen”为我工作,但无法获得以上答案,但这确实可行。
凯尔·查利斯


1

尼克·克雷弗(Nick Craver)的注释是避免未定义对话框时发生错误的最简单方法:

if ($('#elem').is(':visible')) { 
  // do something
}

不过,您应该首先使用以下方法在CSS中设置可见性:

#elem { display: none; }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.