0

我正在尝试开发一个 jquery 插件,该插件可以扩展 ui 对话框,并提供我网站所需的一些附加功能。另一个选项是传递一个 url(对于某些 html 内容,或者对于 iframe)。我总共为我的应用程序定义了 13 个选项。一个奇怪的行为是,当我在回调中调用 dialog() 方法时(ajax 将内容加载到尚未创建但尚不可见的元素中),它创建的不是 1 而是 13 对话框!!!

这是代码(我删掉了不必要的代码;更新插件允许直接将 html 内容加载到元素中,我保留在这里,但是)

jQuery.fn.isset = function(){return this.length>0;}
jQuery.fn.updater = function() {
    var e = this;
    [...]
    options.url         = options.url           || url
    [...]
    $.ajax(options).success(function(data){e.html($(data);});

}; 
jQuery.bzkModal = {
    show :function(content,options){
        options = options ? options : {};
        $j.extend(true, options, {
            modal       : true,
            onClose     : options.onClose   || function(){},
            onOpen      : options.onOpen    || function(){},
            onShow      : options.onShow    || function(){},
            evalScripts : typeof(options.evalScripts)=='boolean' ? options.evalScripts : true,

            /* additional options */
            type : (options.type=='iframe') ? '<iframe>' : '<div>',
            maxHeight   : options.maxHeight || jQuery(window).height() * 0.9,
            maxWidth    : options.maxWidth  || jQuery(window).width() * 0.9,
            width       : 'auto',
            height      : 'auto',
            autoResize  : true,
            position    : options.position  || { my: "center", at: "center", of: 'body' },
        });

        if($('[id="'+content+'"]').isset())  {
            /* just do the standard dialog with options */
            $j('[id="'+content+'"]').dialog(options);
        }   
        else {
            /* create a DOM element */
            var f = $j(options.type);
            /* get content */
            if(options.type=='iframe') {
                [...]               
            }
            else {
                f.updater({url: content, success: function(){
                    f.dialog();
                }});
            } 
            /* if f.dialog(options) here, it works!!! */
        }
    },
        [...]
};

如果我在更新程序之后调用 f.dialog(options),它可以工作,并且我只打开了一个对话框(只是,由于在注入 html 内容之前创建了对话框,所以我在大小和定位方面存在问题对话框)。

有谁知道为什么我可以有这个奇怪的东西(打开 13 个盒子,就像我定义的选项一样......)?

我希望我的问题是全面的,并且我提供了足够的细节。

4

1 回答 1

0

似乎问题来自更新程序。使用以下方法,它可以工作:

jQuery.bzkModal = {
    show :function(content,options){
        [...]
        if($('[id="'+content+'"]').isset())  {
            /* just do the standard dialog with options */
            $('[id="'+content+'"]').dialog(options);
        }   
        else {
            /* create a DOM element */
            var f = $(options.type);
            /* get content */
            if(options.type=='iframe') {
                [...]               
            }
            else {
                $.ajax({url: content, evalScripts: options.evalScripts})
                .success(function(data){ f.html(data).dialog(options); });
            }
        }
    },
    [...]
};

太难了,我不明白问题出在哪里。

于 2013-01-11T15:00:31.427 回答