JQuery错误:初始化之前不能调用对话框上的方法; 试图调用方法“closures”

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

错误:初始化之前无法在对话框中调用方法; 试图调用方法“closures”

插件

<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> 

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'); } }); 

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> 

看起来你的button没有被正确的声明(依据最新的jQuery UI文档 )。

尝试以下方法:

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

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

试试这个 – 它适用于我:

 $(".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; }); 

希望它会帮助你

我也得到了同样的错误:不能在初始化之前调用对话框上的方法; 试图调用方法“closures”

我所做的是我触发了closuresbutton事件是在对话框头像

这对我来说closures对话框的工作很好

 function btnClose() { $(".ui-dialog-titlebar-close").trigger('click'); } 

你的$(this).dialog("close")在Ajax“成功”callback中被调用吗? 如果是这样,请尝试添加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" ); } }); } } }); 

似乎由于某种原因,jQuery UI将尝试在定义时间运行button中定义的所有代码。 这是疯狂的,但我有同样的问题,一旦我做了这个变化,它停滞了。

 if ($(this).dialog.isOpen === true) { $(this).dialog("close"); } 

我在1.10.2中得到了同样的错误。 在我的情况下,我想单击背景叠加隐藏当前可见的对话框,而不pipe它基于哪个元素。 所以我有这个:

 $('body').on("click", ".ui-widget-overlay", function () { $(".ui-dialog").dialog('destroy'); }); 

这曾经是工作,所以我认为他们必须已经取消支持JQUI调用.dialog()popup自己的某个时候。

我的解决方法如下所示:

 $('body').on("click", ".ui-widget-overlay", function () { $('#' + $(".ui-dialog").attr('aria-describedby')).dialog('destroy'); }); 

我之前有一个对话框抛出这个错误,而所有其他人都完美的工作之前,有一个问题。 答案是因为我有另一个元素在页面上具有相同的id="dialogBox"其他软件。 我在search过程中发现这个线程,所以希望这会帮助别人。

所以你使用这个:

 var opt = { autoOpen: false, modal: true, width: 550, height:650, title: 'Details' }; var theDialog = $("#divDialog").dialog(opt); theDialog.dialog("open"); 

如果您在对话框中打开MVC局部视图,则可以在索引中创build一个隐藏button和JQUERY点击事件:

 $("#YourButton").click(function() { theDialog.dialog("open"); OR theDialog.dialog("close"); }); 

然后在部分视图html中调用button触发器点击如下:

 $("#YouButton").trigger("click") 

再见。

这发生在我的时候,当我的ajaxreplace页面上的内容,并最后有两个元素相同的类的对话,这意味着当我的行closures基于CSS类select器执行的对话框,它发现两个元素不是一个,第二个从未被初始化。

 $(".dialogClass").dialog("close"); //This line was expecting to find one element but found two where the second had not been initialised. 

对于ASP.NET MVC上的任何人来说,这是因为我的控制器操作返回了一个完整的视图,包括共享布局页面,因为javascript只是replace了主要内容区域,所以它应该返回一个局部视图。

一个小时后,我发现最好的办法。 我们应该把对话结果保存在variables中,然后调用variables的close方法。

喜欢这个:

 var dd= $("#divDialog") .dialog({ height: 600, width: 600, modal: true, draggable: false, resizable: false }); // . . . dd.dialog('close'); 

我有一个类似的问题,我通过在对话框声明之外定义我的button数组来解决。

 var buttonArray = {}; buttonArray["Ok"] = function() { $( this ).dialog( "close" );} 

你的select将变成:

 modal: true, autoOpen: false, buttons: buttonArray 

我偶然发现,想分享我的解决scheme:

 <script type="text/javascript"> $( "#dialog-confirm" ).dialog("option","buttons", { "delete": function() { $.ajax({ url: "delete.php" }).done(function(msg) { //here "this" is the ajax object $(this).dialog( "close" ); }); }, "cancel": function() { //here, "this" is correctly the dialog object $(this).dialog( "close" ); } }); </script> 

因为“this”引用了一个非对话框对象,所以我提到了错误。

解:

 <script type="text/javascript"> var theDialog = $( "#dialog-confirm" ).dialog("option","buttons", { "delete": function() { $.ajax({ url: "delete.php" }).done(function(msg) { $(theDialog).dialog( "close" ); }); }, "cancel": function() { $(this).dialog( "close" ); } }); </script> 

尝试通过使用对话框正文中的buttonclosures对话框时出现此错误消息。 我尝试使用$('#myDialog').dialog('close'); 哪个没用

我结束了使用以下命令触发标题上的“x”button的点击操作:

 $('.modal-header:first').find('button:first').click(); 

Senguttuvan:你的解决scheme是我唯一的工作。

函数btnClose(){
$(“UI的对话框的标题栏closures”)触发(‘点击’)。
}

我有同样的问题,我打开了几个对话框我的问题是什么内容应该被删除,以防止表单数据保持相同的数据,然后对话框创build这些参数

 var dialog = $("#dummy-1"); dialog.html('<div style="position:absolute; top:15px; left:0px; right:0px; bottom:0px; text-align:center;"><img align="middle" src="cargando.gif"></div>'); dialog.html(mensaje); dialog.dialog( { title:'Ventana de Confirmacion', width:400, height:200, modal:true, resizable: false, draggable:false, position: { my: "center center", at: "center center", of: window }, buttons: [ { text: "Eliminar", click: function() { functionCall(dialog,var1,var2); } }, { text: "Cerrar", click: function() { dialog.dialog("close"); } } ], close: function(event, ui) { dialog.dialog("close").dialog("destroy").remove(); } }); 

并且该对话框作为parameter passing给要执行操作的函数:

  function functionCall(dialogFormulario,var1,var2) { //same action dialogFormulario.dialog("close"); 

}

这里只需要使用.dialog(“close”)和no .dialog(“destroy”),因为对话框会调用它的函数closures,并且元素将不存在

我有一个类似的问题,在我的情况下,问题是不同的(我正在使用Django模板)。

JS的顺序是不同的(我知道这是你检查的第一件事,但我几乎可以肯定的是,情况并非如此,但它是)。 在调用jqueryUI库之前调用对话的js被调用。

我正在使用Django,所以inheritance了一个模板,并使用{{super.block}}从模块inheritance代码。 我必须在解决问题的块的末尾移动{{super.block}}。 调用对话框的js在Django的admin.py中的Media类中声明。 我花了一个多小时才弄清楚。 希望这有助于某人。