2012-02-17 14 views
1

デリゲートハンドラがアタッチされた要素を削除するときにIE8でjQueryの.delegate()メソッドを使用して問題が発生しました。シナリオは次のとおりです。それぞれに削除ボタンがある行のある表がありました。行は動的に作成されたので、削除ボタンはデリゲートを使用してクリックイベントを処理していました。最後の行を削除するときに、テーブル全体が削除されました(テーブルは少なくとも1つの行を作成する値があると作成されました)。それでも、いくつかのページで動作しましたが、1つではありません(各ページでは全く同じコードが使用されていました)。この特定のページでは、最後の行を削除するとIE8で "Object required"デリゲートのためのjQueryコード内にある行。ハンドラで要素を削除するときのベストプラクティスは何ですか?

ハンドラが使用しているDOM要素のいくつかが削除されたときに、ハンドラのベストプラクティスは何ですか? undelegateはある時点で呼び出されるべきですか?あれば、どこで?

+0

コードください.....あなたのコードに問題があり、 "ベストプラクティス"ではないと思います... – Reigel

+0

DOMからどのようにテーブル要素を削除していますか?コードを投稿してください。 –

+0

これはあなたにアイデアやアイデアを与えることを願っていますhttp://jsfiddle.net/reigel/c5mr5/ – Reigel

答えて

3

使用jQueryの.remove() method

あなたは要素自体を削除するだけでなく、その中にすべてのものにしたいとき」.remove()を使用して要素自体に加えて、要素に関連付けられているすべてのバインドされたイベントとjQueryのデータを。削除されます。すべての子を削除しますが、トップレベルの要素を維持する

または.empty() method

+0

私はopが既にそれを使っていると..;) – Reigel

+0

@Reigel - うーん、私は疑問に思っていましたが、 '.html()'や '.detach()'やプレーンなDOMメソッドが使われています。質問は「ベストプラクティス」を求めていたので、私はそれに答えました... – nnnnnn

+1

これは良い点をもたらし、おそらくベストプラクティスの質問は間違っています。 .html()を使用してバックボーンビューでテーブルが作成されています。添付されたバックボーンコレクションに少なくとも1つのモデルがある場合、テーブルhtmlが構築され、コンテナ内に.htmlを使用して配置されます。 、htmlは空の文字列に設定されます。本当の問題は、私のビューコードでDOM要素を作成して削除するより良い方法が必要なことでしょうか? – kinakuta

0

キナクタとは、代表者を正しく設定し、適切に削除を行うことの問題かもしれません。remove()それ自体がです。なぜIE8だけが誤動作するのか、おそらくjQueryのIE8の問題があるのは分かりません。 jQueryの1.7以降.on()

.bind().live().delegate()を置き換え、前方の方法を提供することがあります。私はこのような何かを探していることになります。

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

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

私が知る限り、行削除の時点で、テーブルやその行がMVCやその他の生成メソッドで生成されている必要はありません。

関連する問題