检查对话框是否打开抛出“无法在初始化之前调用对话框上的方法”错误

时间:2015-03-14 15:26:24

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

我正在使用对话框并使用我在文档中找到的代码进行检查

var isOpen = $( "#dialogName" ).dialog( "isOpen" );
$("#here").on("click", function(e){
    if(isOpen){
        $("#dialogName").dialog("close");
    } 
});

有时我会收到错误:

  

未捕获错误:在初始化之前无法调用对话框上的方法;   试图调用方法'关闭'

有时它找不到isOpen。我想做的是:

单击#here时,必须检查对话框是否处于活动状态,然后close不执行任何操作。

2 个答案:

答案 0 :(得分:8)

您似乎还需要检查#dialogName是否已对话。一种可能的检查方法是查看分配给对话框元素的类名:

$("#dialog").hasClass("ui-dialog-content") && $("#dialog").dialog("isOpen")

<强>演示

$(function() {
  $("#init").one("click", function() {
    $("#dialog").dialog();
    $(this).val("Click to open dialog").on("click", function() {
      $("#dialog").dialog("open");
    });
  });
  $("#here").on("click", function(e) {
    if ($("#dialog").hasClass("ui-dialog-content") && $("#dialog").dialog("isOpen")) {
      $("#dialog").dialog("close");
    } else {
      alert("Dialog not initialized or dialog not open");
    }
  });
});
@import url("//ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/redmond/jquery-ui.min.css");
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>

<div id="dialog" title="Dialog title" style="display: none;">Dialog content</div>

<input type="button" id="init" value="Click to create dialog">
<input type="button" id="here" value="Click to close dialog">

答案 1 :(得分:2)

isOpen是在现有对话框上调用的方法,而对话框尚未初始化。

您应首先初始化对话框,然后在click事件处理程序内检查对话框isOpen当前是否存在。

// initialize the dialog:
var myDialog = $( "#dialogName" ).dialog({
    // dialog settings:
    autoOpen : false,
    // ... 
});

$("#here").on("click", function(e){
    // on click, check if is opened:
    var isOpen = myDialog.dialog("isOpen");
    if(isOpen){
       myDialog.dialog("close");
    } 
});

DEMO