让这个jQuery对话框:
$('#myDialog').dialog
({
// …,
buttons:
[
// …,
{
id: "bOK",
click: function () { $(this).dialog("destroy"); }
}
],
open: Do_On_Open (),
// …
});
并且像这样
function Do_On_Open ()
{
// quite a few things here
Center_Dialog ($('#myDialog') );
// $(window).resize ( function () { $('#myDialog').dialog ( "option", "position", gPosStd); });
}
Center_Dialog 函数复制 Do_On_Open 中注释的下一行,如下所示:
function Center_Dialog ( theDialog )
{
$(window).resize ( function ()
{
theDialog.dialog ( "option", "position", { my: "center top", at: "center-40 top+80", of: window });
});
}
在第一次调用对话框时,一切正常: Center_Dialog 在窗口大小调整时按预期运行。在不熟练的调用中, Center_Dialog 中止并且控制台返回一个jQuery错误:“在初始化之前无法在对话框上调用方法;试图调用方法'选项'“。
换句话说,第一个调用仍然被缓存,并且缺少要应用的对象属性,以便在后面的调用上成功完成 - 而清除浏览器的缓存使其再次可用(一次!)。
我做错了什么?
答案 0 :(得分:1)
我已经测试了您的代码。我不确定,但我认为,当您关闭对话框时,对话框已被破坏,因此window.resize无法附加您提供的选项。
我刚删除了您的两个功能并将其直接移至open
方法。
在这种情况下,没有错误。
open: function() {
$(this).dialog("option", "position", {my: "center top", at: "center-40 top+80", of: window});
}
<强>更新强>
如果你想移动对话框,当窗口调整大小时,然后把这个东西放到一个函数中,并检查,你的对话框是否可见:
$.fn.doSomething = function () {
if ($(this).is(":visible")) {
$(this).dialog("option", "position", {my: "center top", at: "center-40 top+80", of: window});
}
};
$(window).resize(function () {
$('#myDialog').doSomething();
});
并在open方法中调用此函数:
open: function () {
$(this).doSomething();
}
关键是检查,对话框是否可见。