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类中声明。 我花了一个多小时才弄清楚。 希望这有助于某人。