无法在其他调用上设置jQuery对话框选项

Impossible to set jQuery dialog option on ulterior calls

本文关键字:设置 jQuery 对话框 选项 调用 其他      更新时间:2023-09-26

让这个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错误:"初始化之前无法调用对话框上的方法;尝试调用方法'option'"。

换句话说,第一个调用保持缓存状态,并且缺少要应用的对象属性,以便成功完成其他调用——同时清除浏览器的缓存使其再次可用(这一次!)。

我做错了什么?

我已经测试了您的代码。我不确定,但我认为,当你关闭对话框时,对话框已经被破坏,所以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();
}

关键是要检查,你的对话框是否可见。