3

サーバー側から生成されたhtmlテーブルがあります:

           DataTable dt2 = new Claims_Service().ASO_MOD_Get_Nulls();
           myGridView.DataSource = dt2;
           myGridView.DataBind();

テーブルには行があり、各行にはボタンがあります。

クライアント側で私は書きます:

 $(".myGridView").on('click', '.myButton', function ()
        {
          ...
        }

ここで、サーバー側で再バインドする必要があるとしましょう。( rebind === 完全なポストバックと再生成ページ)

イベントを解放し、再バインドする前にメモリ リークを防ぐために、 jQueryremove関数を使用する必要がありますか?

また、私が書いた場合、あなたの答えは異なりますか?

$(".myGridView .myButton").on('click',function ()
4

3 に答える 3

1

完全な POST または GET 要求を介してページをリロードする場合、ハンドラーを削除する必要はありません。いずれにせよ、remove()は単にイベント ハンドラを削除するのではなく、要素を DOM から削除します。イベント ハンドラーを削除するには、off()を使用します。

于 2012-09-24T06:16:22.620 に答える
1

そのように書かれている場合:

$(".myGridView").on('click', '.myButton', function () { /* your code */ });

すべての「.myButton」オカレンスに対して dom バブルでパターン マッチングを行っているため、メモリ リークは問題になりません。

その間

$(".myGridView .myButton").on('click',function () { /* your code */ });

すべての個々の「.myButton」オカレンスにアタッチしています

于 2012-09-24T06:16:55.443 に答える
0

onページにいつ追加されたかに関係なく.myButton、任意の要素にコールバックを適用します (古いメソッドと同じ仕事をします)。を使用しても、クライアント側のバインディングはクリーンアップされません。liveremove

元のバインドを使用するoffか、または防止する必要があります(再バインドがページ ポストバックで行われる場合)。

于 2012-09-24T06:16:34.877 に答える