2012-10-22 16 views
6

グローバルajaxSuccessイベントハンドラのバインドを解除する際に問題が発生しました。jQuery ajaxSuccessイベントをバインド解除します。

次のコードを実行してから、ajax関数をテストするたびに、メソッドフックがコードを実行するたびに1回呼び出されます。

var hook = function() { console.log('hey'); }; 
$(document).unbind('ajaxSuccess', hook); // not working 
$(document).bind('ajaxSuccess', hook); 

私もちょうど

$(document).ajaxSuccess(hook); 

を使用してみましたが、上記フックするために既存の参照を交換し、上記と同じ動作を持っていません。

私はjQuery(1.3.2)の非常に古いバージョンを使用しています。

私はここに欠けている明らかな解決策があると確信していますが、脳はちょうど今日働いていません。どんな助けでも大歓迎です!

ありがとうございます!

答えて

5

.unbind()の2番目の引数は、現在バインドされている関数への参照である必要があります。変数を別の関数を指すように変更すると、機能しません。

だから、あなたは、関数への最初のバインドajaxSuccesshookという名前のない場合:その後、

var hook = function() { console.log("a"); }; 
$(document).bind("ajaxSuccess", hook); 

とをhookを変更し、それをアンバインドしよう:

hook = function() { console.log("b"); }; 
$(document).unbind("ajaxSuccess", hook); 
$(document).bind("ajaxSuccess", hook); 

これは失敗しますhookは、もはや含まれているため、元の関数への参照。あなたがhookの値を変更する前に、代わりに、バインド解除:

$(document).unbind("ajaxSuccess", hook); 
hook = function() { console.log("b"); }; 
$(document).bind("ajaxSuccess", hook); 

または、それができない場合には、例えば、元hookがスコープ内にもはやあるので、あなたがすべてバインドハンドラを削除するために、第2パラメータを省略することはできません:あなたはdocument.ajaxSuccessにバインドされた別のハンドラを持っている場合はもちろん

$(document).unbind("ajaxSuccess"); 

、それはまた、結合していないだろう。

+0

私には、あなたの答えを読んだ後、問題を解決するのは非常に簡単だったと説明してくれてありがとう。ありがとう! –

関連する問題