如何判断 jquery ui 对话框查询是否已初始化?

How can I tell if a jquery ui dialog query has been initialized?

我有以下代码来检测 jquery ui 对话框是否打开:

if ($("#dialog-myDialog").dialog("isOpen")) {
      return;
}

效果很好,但我发现在对话框首先被初始化之前调用此代码的情况,并且此 if 语句在这种情况下似乎只是爆炸。

检查 jquery ui 对话框是否已初始化的最佳方法是什么,以便我可以正确处理这种情况。

测试元素是否有ui-dialog-content class:

if ($("#dialog-myDialog").hasClass("ui-dialog-content") &&
    $("#dialog-myDialog").dialog("isOpen")) {
    return;
}

如果您使用的解决方案依赖于由您无法控制的组件添加的 css class,那么您 运行 的风险不如果组件的新版本改变了它的管理方式,工作正常 classes.

一个更可靠的解决方案是在对话框初始化时添加您自己的存在指示器:

$("#popup").attr("_dialogInitialized", "yes").dialog( { ... } )

然后在需要时检查指标:

if ($("#popup[_dialogInitialized]").length == 1) {
    // dialog has been previously initialized
} else {
    // dialog has been not yet been initialized
}

初始化时加一个class:

$("selector").addClass("initialized").dialog( { ... } );

然后在需要时检查 class:

if ($("selector").hasClass("initialized")) { ... }