2009-09-06 14 views
9

イベントバインドされた要素がいくつかあります。これらの要素を削除する前に、まずバインドを解除する必要がありますか?私は彼らが問題を引き起こすことはありませんか?jqueryバインドが必要ですか? (要素の置き換え)

ありがとうございました。

編集:私は質問を間違って表現していましたので、編集しています。私はそれを言い訳していますが、私は新しい質問をするよりもこれを行う方が理にかなっています。

置き換える場合は、要素のバインドを解除するか、要素を削除する必要がありますか? js replacewithメソッドまたはhtmlメソッドをjqueryで使用します。

答えて

17

いいえ、そうする必要はありません(イベントのバインドは削除時に自動的に行われます)。

+7

です。そのdiv内の何かにクリックまたはバインドされたイベントがありました。自動的にアンバインドされますか? – kr1zmo

+0

@ kr1zmoこれは私が探していたものです... – rtpHarry

+3

'.html(htmlString)' [イベントもバインド解除します](http://api.jquery.com/html/#html2) "さらに、jQueryこれらの要素を新しいコンテンツに置き換える前に、子要素からデータおよびイベントハンドラなどの他の構成要素を削除します。 – rtpHarry

1

いいえ、誰かが不愉快な経験を共有しない限り、何の問題も起こりません:)私のお金は「それは問題ではありません!」です。

唯一の例外は、以前にDOMから削除した要素の同じイベントハンドラを新たに挿入された要素に追加したくない状況で、ライブイベントバインディングを実行している場合です。その後、DOMから削除する前に、(ライブの)イベントハンドラをバインド解除することをお勧めします。削除する前に、必ずしもそうする必要はありません。

7

明示的にバインドを解除する必要があるのは、ページ上のイベントのイベントハンドラが不要になった場合だけです。

DOMから要素を削除すると、その要素のイベントとデータも削除されます。 。ここではdiv要素がjQueryの( 'DIV')HTML( '')でクリアされた場合にどのような関連するソースコード

remove: function(selector) { 
    if (!selector || jQuery.filter(selector, [ this ]).length) { 
     // Prevent memory leaks 
     jQuery("*", this).add([this]).each(function(){ 
      jQuery.event.remove(this); 
      jQuery.removeData(this); 
     }); 
     if (this.parentNode) 
      this.parentNode.removeChild(this); 
    } 
} 
関連する問題