检测jQuery UI对话框是否打开

100

我正在使用一个jQuery UI对话框。如果它是打开的,我想做一件事情。如果它是关闭的,我想做另一件事情。

我的问题是,如何检测一个jQuery UI对话框是否打开或关闭?

5个回答

181

如果你阅读文档

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

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


1
糟糕!我不知道我怎么会忽略了那个。谢谢你。 - user208662
1
你如何对所有对话框进行测试?假设你有十个不同的对话框,每个都有单独的初始化和选项,并且你想测试它们中的任何一个是否打开,而不是特定的选择器? - Kirk Ross
将一个类添加到所述对话框,然后更改isOpen检查上的选择器。 - Suipaste
1
另外还有:十个对话框?也许通过重复使用一个或两个实例来减少它们是值得考虑的想法。 - David
1
还要检查对话框是否已经使用 $("#mydialog").hasClass("ui-dialog-content") 进行了初始化。请参阅 https://dev59.com/0V0b5IYBdhLWcg3wLOc2 - Autumn Leonard
显示剩余3条评论

56

事实上,你必须显式地将其与true进行比较。如果对话框尚不存在,则不会返回false(如您所期望的那样),它将返回一个DOM对象。

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

4
在最新版本的 JQuery 中返回 false。 - hoyhoy
1
你如何对所有对话框进行测试?假设你有十个不同的对话框,每个都有单独的初始化和选项,并且你想测试它们中的任何一个是否打开,而不是特定的选择器? - Kirk Ross
2
也许可以创建一个函数,类似于 $(".ui-dialog").each(function(/检查这个对话框/))? - marcovtwout

22

如果您想检查特定元素上的对话框是否打开,可以这样做:

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
谢谢,我无法通过“isOpen”获得上述答案,但这个方法有效。 - Kyle Challis

3
尼克·克雷弗(Nick Craver)的评论是避免出现错误的最简单方法,如果对话框尚未定义,则应采用以下方法:
if ($('#elem').is(':visible')) { 
  // do something
}

但你需要先在CSS中设置可见性,可以使用以下代码:

#elem { display: none; }

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接