当我更新到新的jQuery(v2.1)和jQuery UI(v1.11)时,我开始收到错误:在初始化之前无法在对话框上调用方法;试图调用方法'关闭' 此外,dialog.dialog停止了覆盖工作。
代码功能:
function ShowPopup(element, restCon, restLay, url) {
$(element).dialog({
autoOpen: false,
resizable: false,
modal: true,
open: function () {
dialogs.push(this);
//other function
},
close: function () {
$(this).dialog('destroy').empty();
$(this).remove();
//other function
},
width: 250,
height: 320,
closeOnEscape: true,
title: "Show ",
position: {
my: "center",
at: "center",
of: $("container")
},
buttons: [
{
text: "Close",
click: function () {
$(this).dialog("close");
}
}
]
});
$(element).load(url, function () {
//other element
});
}
第二个功能:
function CreatePopup(link, contId, restore, url) {
var target = $(link).not(".details-link");
if (target.length > 0)
{
target.addClass("details-link");
target.click(function(){
ShowPopup(
'#' + contId,
restore,
'<div id="'+ contId +'"></div>',
url + $(this).attr('data-id')
);
});
}
}
通话功能:
$(function () {
var count = '@Model.Count';
setCountToSubTabjQuery($("#client-projects-@guid").closest(".tabs- view").find('.tab-link.tab-link-project').children('.number'), count);
CreatePopup('.project-Name',
'project-info-details-popup-container-@guid',
'#containerProject',
'/Project/Details?id=');
});
HTML:
<div class="details-Item project-Name" data-id="@Model[i].ID">@Model[i].Project</div>
答案 0 :(得分:0)
您发布的代码不包含实际打开对话框的行,因此我的猜测是您在其他地方执行此操作。这很可能导致错误。
问题是您在.dialog.destroy()
函数处理程序中调用.remove()
和close
。该调用会破坏窗口小部件并从DOM中删除HTML元素。但是,HTML元素在内存中仍然存在,因为您在变量myDialog
中保存了对它的引用。随后对close
的调用将抛出您正在接收的异常(或任何窗口小部件方法)。
这是一个重复问题的小提琴;只需关闭对话框并尝试重新打开它:http://jsfiddle.net/xsspx7d7/
现在,为了解决这个问题:
最简单的解决方法是完全删除变量myDialog
,并在任何地方使用选择器$('#add-edit-' + id)
。这样,一旦对话框被销毁,选择器就不会匹配任何东西,也不会抛出任何错误。
如果您有机会,更灵活,更有弹性的解决方案是重做对话框的生命周期,并让close
处理程序摆脱destroy
和{{ 1}}函数调用。