递归破坏jQuery UI Dialog的内容

时间:2013-02-24 17:51:07

标签: jquery jquery-ui dialog destructor

我的代码打开一个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/

谢谢!

1 个答案:

答案 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中添加此内容,它将修复所有对话框。对我来说很完美。