我的代码打开一个jQuery UI对话框,并使用AJAX加载内容。其他几个小部件正在对话框中初始化。当对话框关闭时,我销毁()并删除()它的div,但它不会破坏里面的小部件。
如何在对话框关闭时正确删除mydiv中的所有元素?
// mydiv contains variable content
mydiv.dialog({
autoOpen: true,
close: function(){
// destroy mydiv and all widgets inside it
mydiv.dialog('destroy').remove();
alert('Unfortunatelly, inner dialog remained. How to get rid of ALL widgets placed inside "mydiv?"');
// How do i destroy everything inside?
}
});
互动示例:http://jsfiddle.net/r4cHY/4/
谢谢!
答案 0 :(得分:0)
我解决了自己的问题。 jQuery UI对话框的实现将指定完全删除它的父级,并将其移动到可以更好地定位的位置。不幸的是,打开对话框的上下文与窗口小部件之间不再存在链接,这就是为什么销毁内容不会影响对话框。
更好的小提琴:http://jsfiddle.net/gxXBY/
这会在复杂的UI系统中导致各种负面影响,我相信这是jQuery UI中的一个错误。这是一个修复:
var oldcr = $.ui.dialog.prototype._create;
$.ui.dialog.prototype._create = function(){
var self=this;
$('<div/>').insertBefore(this.element).on('remove',function(){
self.element.remove();
});
oldcr.apply(this,arguments);
};
在任何地方的javascript中添加此内容,它将修复所有对话框。对我来说很完美。