递归销毁jQuery UI对话框的内容
我的代码打开一个jqueryui对话框,并使用AJAX加载内容。其他几个小部件正在对话框内初始化。当对话框关闭时,我销毁()并删除()它的div,但它不会销毁里面的小部件 如何在对话框关闭时正确删除mydiv中的所有元素递归销毁jQuery UI对话框的内容,jquery,jquery-ui,dialog,destructor,Jquery,Jquery Ui,Dialog,Destructor,我的代码打开一个jqueryui对话框,并使用AJAX加载内容。其他几个小部件正在对话框内初始化。当对话框关闭时,我销毁()并删除()它的div,但它不会销毁里面的小部件 如何在对话框关闭时正确删除mydiv中的所有元素 // mydiv contains variable content mydiv.dialog({ autoOpen: true, close: function(){ // destroy mydiv and all widgets insi
// 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?
}
});
交互式示例:
谢谢 我解决了自己的问题。jQueryUI对话框的实现将指定的对象完全从其父对象中移除,并将其移动到可以更好定位的位置。不幸的是,打开对话框的上下文和小部件之间不再存在链接,这就是为什么销毁内容不会影响对话框的原因 更好的小提琴: 这会在复杂的UI系统中导致各种负面影响,我认为这是jQueryUI中的一个bug。这里有一个修正:
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);
};
var oldcr=$.ui.dialog.prototype.\u创建;
$.ui.dialog.prototype.\u create=function(){
var self=这个;
$(“”).insertBefore(this.element).on('remove',function()){
self.element.remove();
});
oldcr.apply(这个,参数);
};
将此添加到javascript anywhere中,它将修复所有对话框。对我来说效果很好。jQuery/jQuery UI的早期版本似乎对我的示例很好。