1

デリゲート ハンドラーがアタッチされている要素を削除するときに、IE8 で jQuery の .delegate() メソッドを使用すると問題が発生しました。シナリオは次のとおりです。それぞれに削除ボタンがある行を含むテーブルがありました。行は動的に作成されたため、デリゲートを使用してクリック イベントを処理する削除ボタンが接続されました。最後の行を削除するときが来たとき、テーブル全体が削除されました (テーブルは、少なくとも 1 つの行を作成する値があった場合にのみ作成されました)。それでも、一部のページでは機能しましたが、1 つだけでは機能しませんでした (各ページでまったく同じコードが使用されました)。デリゲートのjQueryコードにある行。

問題は、ハンドラーが使用している DOM 要素の一部が削除された場合のハンドラーのベスト プラクティスは何でしょうか? ある時点で undelegate を呼び出す必要がありますか? もしそうなら、どこで?

4

2 に答える 2

3

jQuery の.remove()メソッドを使用します。

.remove()要素自体とその中のすべてを削除する場合に使用します。要素自体に加えて、要素に関連付けられたすべてのバインドされたイベントと jQuery データが削除されます。」

または、すべての子を削除するが最上位の要素を保持する.empty()方法。

于 2012-02-17T03:09:51.257 に答える
0

remove() 木久田さんのおっしゃる通り、 を使うか使わないかではなく、委譲を正しく設定し、削除を適切に表現するかどうかの問題かもしれません。IE8 だけが誤動作する理由を理解するのは難しいですが、おそらく jQuery の IE8 の問題です。

jQuery 1.7+では、、 and が.on()置き換えられ、先に進む可能性があります。私はこのようなことをしようとしています:.bind().live().delegate()

$("#myContainer").on("click", "button.delete", function(event){
    $(this).closest("tr", "#myContainer").remove();
});

.delegate()jQuery <1.7 を使用している場合は、間違いなく同様のことを達成できます。

私が知る限り、行の削除の時点で、テーブルおよび/またはその行がMVCまたはその他の生成方法で生成されたことは問題ではありません。

于 2012-02-17T04:39:06.633 に答える