0

そのため、他の多くの人と同じように、ajax でロードした外部ページからのスクリプトの処理に問題があります。

その上に「管理パネル」があるページを設定しようとしています。パネル内の複数の管理ページに移動できるようにしたいと考えています。さまざまな管理ページには、それらに含まれる内部および外部の両方の<script>js ファイルがあります。スクリプトは正常にロードされますが、スタックしているように見えるか、適切に管理されていません。

管理ページの 1 つで小さなテストを行いました。

$('.left-col').click(function () {
    alert();
});

ここでは、このページに戻るたびに別のクリックがバインドされるため、div をクリックするたびに 2 つのアラートが表示されます。$('.left-col').unbind();これは、ajax.success で実行することで簡単に解決できます。

ただし、一部の管理ページには大量の .click/.change/.live などがあり、それらが何であるかさえわかりません (つまり、外部プラグインから)。では、各要素を指定せずに、ajax でロードされた各ページからロードされたすべてのスクリプトを何らかの方法でアンバインド/削除できますか? アンバインドでセレクターを使用できることはわかっていますが、各 div/img/input などをループしてバインドを解除するのはあまり効果的ではないようです。また、それが機能するかどうかもわかりません。

これは、管理ページをロードする方法です。

<script type="text/javascript">
$(document).ready(function() {  

function reloadAdminPanel(url) {
    if(typeof(url)  === "undefined") {
        var url = '/admin/panel/dashboard/';
    }

    $.ajax({
        'success': function (data, textStatus) { 
            var jData = $(data);

            // override links in admin to run reloadAdminPanel()
            jData.find('a').each(function() {
                var newUrl = $(this).attr('href');

                $(this).click(function(e) {
                    reloadAdminPanel(newUrl);
                    return false; 
                });

            });


            $('div.panel__inner').remove();
            $('body').prepend(jData);
            delete jData;
        },
        'url':  url
    });

}
reloadAdminPanel();
});
</script>

どんな助けでも大歓迎です、乾杯!

ページの構造:

<html>
<body>
<div class="panel__inner"> <!-- admin panel --> </div>
    <!-- rest of project site -->
</body>
</html>
4

1 に答える 1

0

要素の構造を示していただけると助かるかもしれませんが、Jquery の「削除」の定義から、要素、その子、すべてのイベント、およびそれに関連付けられているすべてのデータを削除する必要があります。

div.panel__inner は body タグ内にありますか? div で削除を行っているようですが、データを $('body') の先頭に追加しています。本体の中身自体を取り除くことはできますか?

于 2011-09-02T11:34:11.357 に答える