7

グローバルajaxSuccessイベントハンドラーのバインドを解除するのに問題があります。

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

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

私も使ってみました

$(document).ajaxSuccess(hook);

ただし、上記はフックへの既存の参照を置き換えるものではなく、上記と同じ動作をします。

関連する可能性のあることの1つは、非常に古いバージョンのjQuery(1.3.2)を使用していることです。

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

前もって感謝します!

4

1 に答える 1

7

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

したがって、最初に次ajaxSuccessの名前の関数にバインドすると、次のようになりますhook

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).unbind("ajaxSuccess");

もちろん、別のハンドラーがバインドされている場合はdocument.ajaxSuccess、バインドも解除されます。

于 2012-10-22T21:34:03.627 に答える