jQueryのでは、要素を削除する場合は、その上に任意のイベントが削除されますか?
-
20-09-2019 - |
質問
たとえば、私はそれにバインドされた次のイベントとのリンクを持っている場合:
$("a.d").bind("click", this, onDelete);
以降の操作を行います。
$("a.d").remove();
その罰金ですか?それとも、それはメモリリークが発生し、私はアンバインド第一を呼び出す必要がありますか。
任意の助けてくれてありがとう。
解決
私はそれをテストしていませんが、私は、要素を削除すると、そのイベントハンドラをバインド解除することを信じています。私はあなたが移動する場合と述べのjQuery APIドキュメントを(削除の検索)から、この結論に達しますDOMの一部から別のものへの要素:
$("#foo").remove().appendTo("#bar");
タグのように記述する必要があります
$("#foo").appendTo("#bar");
イベントハンドラが失われないようにする。
他のヒント
jQueryのドキュメントから削除のために()
からすべてのマッチした要素を削除します。 DOM。これは、からそれらを削除しません あなたが使用できるようにjQueryオブジェクト、 さらにマッチした要素。注意 この機能は、1.2.2で始まること また、すべてのイベントハンドラを削除します そして、内部のデータをキャッシュされました。
答えは、イエスイベントはjQueryを使って取り付けたように長いです。場合は「onclickの」私はそれがなると信じていないようなものを添付します。
この記事では、そのいくつかを説明します。また、要素とそのすべての子のためのすべてのクリックイベントを削除するには再帰関数を定義します。それはあなたがカバーしているのonclickように定義されたjQueryのクリックハンドラなどのハンドラをカバーします。
のhttp:/ /www.computerhowtoguy.com/how-to-use-the-jquery-unbind-method-on-all-child-elements/する
function RecursiveUnbind($jElement) {
// remove this element's and all of its children's click events
$jElement.unbind();
$jElement.removeAttr('onclick');
$jElement.children().each(function () {
RecursiveUnbind($(this));
});
}
前の例で機能を使用するには、我々はjQueryオブジェクトとしてそれを「コンテナ」のdivを渡す関数を呼び出します。
RecursiveUnbind($('#container'));
は記録のためには、JavaScriptのメモリリークを心配する必要はありません。 (チル男ではなく、C ++!)
ブラウザのJavaScriptエンジンは、すべてのオブジェクトを管理し、ごみは、それらを収集します。私は、オブジェクトを言うとき機能もJavaScriptでオブジェクトをされているので、それは、あまりにもイベント処理関数を意味します。
関連のない:私はすべてがJavaScriptでのオブジェクトがどのように愛して:D
乾杯!
JRH