jQueryで今後作成される要素にイベントを追加するにはどうすればいいですか?
.live()は、将来作成される要素のイベントをアタッチする際に機能しますが、.bind()のようにイベントを複数回アタッチします。しかし、私はイベントを1回だけ添付する必要があります。
例:
私の場合
http://jsfiddle.net/ppTqp/1/ -> Should alert
“Live from test” only once. With .live method it alerts twice.
更新:
どうやら、イベントハンドラは、 live
、 delegate
、または
on
この場合は、まずイベントハンドラをバインド解除する必要があります。名前空間を使用すると、特定のイベントハンドラのみをバインド解除できます。
$(document).off('click.namespace').on('click.namespace', selector, function() {
});
live
の場合は、 die
を呼び出す必要があります。
$(...).die('click').live(...)
私はイベントハンドラがいくつかの要素に束縛されていると仮定します。 live
、
delegate
、または on
の性質上、イベントハンドラが実行されたときにイベントハンドラを単にアンバインドすることはできません1つの要素のために、他の要素のためにもう発射されないので。代わりに、どの要素が解雇されたかを把握しておく必要があります。
例:
$(document).on('click', selector, function() {
if(!$(this).data('fired')) {
$(this).data('fired', true);
//do your stuff
}
});
もう1つの解決策は、
.one()
を使用して、新しい要素を作成するたびにイベントハンドラをバインドすることです。
あなたの用語について:
イベントを添付することはできませんが、イベントハンドラーはできません。
bind
は、イベントやイベントハンドラを複数回、一度だけは付けませんが、一度バインドされると常に特定のイベントに対して起動します。イベントハンドラを一度だけ呼び出すには、呼び出された後にバインドを解除する必要があります。