0

私のコードはjQueryUIダイアログを開き、AJAXを使用してコンテンツをロードします。他のいくつかのウィジェットがダイアログ内で初期化されています。ダイアログを閉じると、それはdivですがdestroy()とremove()を実行しますが、内部のウィジェットは破棄されません。

ダイアログを閉じるときに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 に答える