递归销毁jQuery UI对话框的内容

递归销毁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

我的代码打开一个jqueryui对话框,并使用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?
    }        
});
交互式示例:


谢谢

我解决了自己的问题。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的早期版本似乎对我的示例很好。