2009-04-12 17 views
68

簡単なコードで問題を説明しようとします。jqueryイベントハンドラを上書きする方法

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

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

これで明らかに2回警告されますが、警告が1回だけ必要です。たくさんの方法を試しましたが、結果はありません。

ありがとうございました。

+0

イベントをバインドする呼び出しが2回発生する状況について、いくつかのコンテキストを与えることはできますか?たぶん、2番目の呼び出しがコードの機能を少し変更するのを防ぐことができます。 –

+1

関連:http://stackoverflow.com/questions/209029/best-way-to-remove-an-event-handler-in-jquery –

+17

「Voila」です。 :) –

答えて

121

jQuery 1.7以降では、イベントハンドラを削除するにはoffを使用し、追加するにはonを使用する必要がありますが、引き続きclickの略語を使用できます。

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

オリジナルの答え:あなたはすべてのクリックハンドラを置き換えたい場合は

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

$('#clickme').unbind('click').click(fireclick); 
$('#clickme').unbind().click(fireclick); 
+1

Bah!あなたはコールを連鎖させるために勝つが、多分あなたの答えを洗練して、特定のハンドラが再追加されるようにするだけだ。 $( '#clickme')。unbind( 'click'、fireclick).click(fireclick) –

+4

質問は「jqueryイベントハンドラを上書きする」という質問でした。これを行うためには、毎回アンバインドを呼び出す必要があります(これが私が両方の呼び出しを繰り返した理由です)、関数の引数を指定しないでください。 – tvanfosson

+3

これはあなたが質問に答えたときにこれを行う正しい方法だったので、私はupvotedしました。つまり、「新しく改良された」方法はon()メソッドとoff()メソッドであると私は信じています。この回答は「jquery replace event handler」という検索の最初のGoogle検索結果であるため、回答に追加すると便利です。 click(fireclick); '$( '#clickme')。off( 'click')。 。 – chucksmash

3

私は、余分な呼び出しを排除しようとしていますが、毎回これらの両方を呼び出すことを確認することができtyhatの短いでしょう:

$('#clickme').unbind('click', fireclick); 
$('#clickme').click(fireclick); 
+0

ありがとう、それは今働きます:) – taras

18

あなたが最初に削除するためにjQueryの機能unbindを使用することができますイベント:

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

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

setIntervalを使用する必要があります。問題は、同時に2つのアラートをポップアップさせることができないことです。まず一つは

+5

あなたは質問を読んだことがありますか? – kapa

20

は、あなたが他のリスナーを削除しないことを確認するために、名前空間を使用して...最初にクローズするか、二つ目は画面に表示されないことができている:なしとして

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

限りコードはXXXを使用しているため、あなたが気づいていない他の動作を混乱させていないことを確認できます。

関連する問題