我正在尝试开发一个 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 个盒子,就像我定义的选项一样......)?
我希望我的问题是全面的,并且我提供了足够的细节。