【问题标题】:How can I tell if a jquery ui dialog query has been initialized?如何判断 jquery ui 对话框查询是否已初始化?
【发布时间】:2015-04-09 02:27:33
【问题描述】:

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

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

这工作正常,但我发现在初始化对话框之前调用此代码的情况,这个 if 语句似乎只是在这种情况下爆炸。

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

【问题讨论】:

    标签: jquery jquery-ui jquery-ui-dialog


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      如果您使用的解决方案依赖于您无法控制的组件添加的 css 类的存在,那么如果组件的新版本改变了它管理类的方式,您将面临无法正常工作的风险.

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

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

      然后在需要时检查您的指标:

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

      【讨论】:

        【解决方案3】:

        在初始化时添加一个类:

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

        然后在需要时检查类:

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

        【讨论】:

        • 有时是不正确的。 dialog() 将调用 resize 事件处理程序,并且在此调用期间对话框仍未初始化,但类已经存在。
        猜你喜欢
        • 2011-02-27
        • 2018-03-22
        • 1970-01-01
        • 2013-03-12
        • 1970-01-01
        • 2012-09-05
        • 1970-01-01
        • 2014-02-10
        • 2017-06-01
        相关资源
        最近更新 更多