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

dev*_*dar 50 html javascript jquery jquery-ui

我突然从jQuery得到这个错误:

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

插件

 <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
 <script src="http://code.jquery.com/ui/1.9.1/jquery-ui.js"></script> 
Run Code Online (Sandbox Code Playgroud)

jQuery代码

我在以下函数中获取这些消息:

$(document).ready(function() {
  if ($('#results').html().length != 0) {
    alert('has information');

    $('#dialog').dialog({
      modal: true,
      buttons: {
        Ok: function() {
          // If I use $(this).dialog($(this)).dialog('close'), the UI is displayed,
          // however I do not see the OK button and no errors 
          $(this).dialog('close');
        }
      }
    });
  } else {
    alert('has no data');
  }
});
Run Code Online (Sandbox Code Playgroud)

HTML

<div id="dialog" title="Server Response">
  <p><span class="${icon}" style="float: left; margin: 0 7px 50px 0;"></span>
    <label id="results">${results}</label>
  </p>      
</div>
Run Code Online (Sandbox Code Playgroud)

Beh*_*ehr 26

在asp.net MVC中打开带有局部布局的对话框时,我遇到了类似的问题.我在部分页面上加载了jquery库以及导致出现此错误的主页面.


pmc*_*own 22

看起来你的按钮没有正确声明(无论如何根据最新的jQuery UI文档).

尝试以下方法:

$( ".selector" ).dialog({ 
   buttons: [{ 
      text: "Ok", 
      click: function() { 
         $( this ).dialog( "close" ); 
      }
   }]
});
Run Code Online (Sandbox Code Playgroud)

  • 文档说:*"支持多种类型: - 对象:键是按钮标签,值是单击相关按钮时的回调. - Array:[...]*".看起来这是OP所拥有的,根据文档,它没关系. (6认同)
  • 这是完全合理的,这是公认的答案.它解决了这个问题,因为jqueryui文档中的一些示例是错误的(特别是{name:callback}变体.来源:我遇到了完全相同的问题,更改了我的按钮定义,问题得到解决. (4认同)
  • 不适合我.问题依旧 (3认同)

Eds*_*onF 15

试试这个 - 它对我有用:

$(".editDialog").on("click", function (e) {
    var url = $(this).attr('href');
    $("#dialog-edit").dialog({
        title: 'Edit Office',
        autoOpen: false,
        resizable: false,
        height: 450,
        width: 380,
        show: { effect: 'drop', direction: "up" },
        modal: true,
        draggable: true,
        open: function (event, ui) {
            $(this).load(url);
        },
        close: function (event, ui) {
            $("#dialog-edit").dialog().dialog('close');
        }
    });

    $("#dialog-edit").dialog('open');
    return false;
});
Run Code Online (Sandbox Code Playgroud)

希望它会对你有所帮助

  • 对我来说,它是明确声明对话框名称,而不是使用'this' (5认同)
  • 有人恭维什么可以解释究竟是什么产生了影响?我看到第二次调用`dialog()`,这次使用`dialog('open')`,但是我试过了,它没有任何区别.这还有什么不同? (2认同)

小智 10

我也得到了同样的错误:在初始化之前无法在对话框上调用方法; 试图调用方法'关闭'

我做的是我触发了对话框标题中的关闭按钮事件

这对我来说很好,可以关闭对话框

function btnClose() {
$(".ui-dialog-titlebar-close").trigger('click');
}
Run Code Online (Sandbox Code Playgroud)


Adr*_*pez 9

您是否$(this).dialog("close")有机会从Ajax"成功"回调中调用?如果是这样,请尝试添加context: this为您的$.ajax()通话选项之一,如下所示:

$("#dialog").dialog({
    modal: true,
    buttons: {
        Ok: function() {
            $.ajax({
                url: '/path/to/request/url',
                context: this,
                success: function(data)
                {
                    /* Calls involving $(this) will now reference 
                       your "#dialog" element. */
                    $(this).dialog( "close" );
                }
            });
        }
    }
});
Run Code Online (Sandbox Code Playgroud)


Joh*_*Pan 5

似乎由于某种原因 jQuery UI 会尝试在定义时运行按钮中定义的所有代码。这很疯狂,但我遇到了同样的问题,一旦我做了这个改变,它就停止了。

if ($(this).dialog.isOpen === true) { 
    $(this).dialog("close");
}
Run Code Online (Sandbox Code Playgroud)