一度だけ実行してから、バインドされているすべての要素から自分自身をアンバインドするイベントハンドラーが必要です。
私は知って.one()
いますが、それを使用する場合、「ハンドラーは要素ごとに最大1回実行されます」。
イベントハンドラーを複数の要素にバインドし、それらのいずれかで実行されると、すべての要素から自動的に削除する「組み込み」の方法はありますか?
一度だけ実行してから、バインドされているすべての要素から自分自身をアンバインドするイベントハンドラーが必要です。
私は知って.one()
いますが、それを使用する場合、「ハンドラーは要素ごとに最大1回実行されます」。
イベントハンドラーを複数の要素にバインドし、それらのいずれかで実行されると、すべての要素から自動的に削除する「組み込み」の方法はありますか?
簡単。コールバック関数内のイベントハンドラーのバインドを解除するだけです。このような:
$('p').on('click', function(){
alert('I appear only one time');
$('p').off('click'); // Removes the event. So, it will never be executed again.
})
このスクリプトは、クリックタイプのすべてのイベントを削除しますが、これは少し攻撃的です。詳細については、ドキュメントでオフとアンバインドを確認してください。
miguel cambaは、ウィキのバインド解除を確認するようにすでに指示しています。正しい解決策は次のとおりです。
var handler = function() {
alert('I appear only one time');
$('p').unbind('click', handler);
}
$('p').bind('click', handler);
これにより、このハンドラーのみがクリックイベントからバインド解除されます。
//編集:
別の解決策は、クリックイベントに名前空間を付けることです。
$('p').bind('click.myClickEvent', function() {
alert('I appear only one time');
$('p').unbind('click.myClickEvent');
});