web-dev-qa-db-ja.com

jqueryイベントハンドラを上書きする方法

私は簡単なコードで問題を説明しようとします。

var fireClick = function() { alert('Wuala!!!') };

$('#clickme').click(fireclick);
$('#clickme').click(fireclick);

したがって、今では明らかに2回アラートを出しますが、1回だけアラートが必要です。いろいろ試してみましたが、結果はありませんでした。

ありがとう。

73
taras

JQuery 1.7では、 off を使用してイベントハンドラーを削除し、 on を使用してイベントハンドラーを追加する必要がありますが、clickショートハンドを使用できます。

$('#clickme').off('click').on('click', fireclick);
$('#clickme').off().on('click', fireclick);

元の回答:

すべてのクリックハンドラを置き換える場合は、関数引数なしで最初に nbind を呼び出します。すべてのイベントハンドラを置き換える場合は、イベントタイプを指定しないでください。

$('#clickme').unbind('click').click(fireclick);
$('#clickme').unbind().click(fireclick);
130
tvanfosson

名前空間を使用して、他のリスナーを削除しないようにします。

$('#clickme').off('click.XXX').on('click.XXX', fireclick);

他のコードがXXXを使用していない限り、気付いていない他の動作を台無しにしないようにすることができます。

22
Neil Stevens

JQuery関数 nbind を使用して、最初のイベントを削除できます。

var fireClick = function() { alert('Wuala!!!') };

$('#clickme').click(fireclick);
$('#clickme').unbind('click', fireClick); // fireClick won't fire anymore...
$('#clickme').click(fireclick); // ...but now it will
18
moff

私は余分な呼び出しを排除しようとしますが、それ以外の場合は、これらの両方を必ず呼び出すようにしてください:

$('#clickme').unbind('click', fireclick);
$('#clickme').click(fireclick);
3
Mark Renouf