要素がページから削除された場合、自動的にバインド解除されますか?または、これは、jqueryのバインドを使用してバインドを解除する必要があるシナリオですか?私はそれが自動的に行われますと仮定しjQueryのアンバインド
...
要素がページから削除された場合、自動的にバインド解除されますか?または、これは、jqueryのバインドを使用してバインドを解除する必要があるシナリオですか?私はそれが自動的に行われますと仮定しjQueryのアンバインド
...
あなたがremove
やempty
を使用して要素を削除した場合、イベントハンドラは、自動的にメモリリークを防ぐために削除されます。そうでない場合、それらの要素を削除する前に明示的にバインド解除されない限り、それらはそのまま残ります。
EDIT:.html
は、.cleanData
メソッド(5177行で宣言されている)を呼び出すことでイベントハンドラも削除します。あなたはsourceでこれを確認することができます。
html: function(value) {
...
for (var i = 0, l = this.length; i < l; i++) {
// Remove element nodes and prevent memory leaks
if (this[i].nodeType === 1) {
jQuery.cleanData(this[i].getElementsByTagName("*"));
this[i].innerHTML = value;
}
}
...
ので、メモリリークを回避するために、直接jQueryのイベントハンドラを添付したDOM要素を置き換えるためにinnerHTML
を使用しないでください。
.html( "stuff")を使ってdivの内容を置き換えた場合、以前にその要素がバインドされたままであることを理解していますか?後でバインドを解除することはできますか、またはそれらをDOMから削除する前にバインド解除する必要がありますか? – Matrym
@ karim79学習目的のためだけに、バインディング要素に関連するメモリリークの例を挙げることができます。クリックまたはマウスオーバー – kobe
@martym .htmlは、いくつかの既存のdom elemntsにhtmlを適用するので、agianをバインドする必要はありません要素にバインドする必要がある場合は、jquery.liveを使用して実行する必要があります。 – kobe
@martym domからelmentを削除して再度ページを読み込むと、その要素が見つからないため、再びバインドされません。それは次のページの読み込みで発生します。 – kobe
リフレッシュせずに別のページを読み込んでいるのはなぜですか?私はあなたの答えによってちょっと混乱しています... – Matrym