0

我的代码打开一个 jQuery UI 对话框并使用 AJAX 加载内容。对话框内正在初始化其他几个小部件。当对话框关闭时,我 destroy() 和 remove() 它是 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/

谢谢!

4

1 回答 1

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 中的任何位置,它将修复所有对话框。非常适合我。

于 2013-02-24T19:02:29.923 回答