不可能在不可告人的电话

时间:2016-05-10 10:07:04

标签: javascript jquery

让这个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错误:“在初始化之前无法在对话框上调用方法;试图调用方法'选项'“。

换句话说,第一个调用仍然被缓存,并且缺少要应用的对象属性,以便在后面的调用上成功完成 - 而清除浏览器的缓存使其再次可用(一次!)。

我做错了什么?

1 个答案:

答案 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();
}

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