7

无法解除绑定全局 ajaxSuccess 事件处理程序。

每次我运行以下代码然后测试 ajax 函数时,每次运行代码时都会调用一次方法挂钩。

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

我也尝试过使用

$(document).ajaxSuccess(hook);

但上面的内容并没有取代现有的 hook 引用,并且具有与上面相同的行为。

可能相关的一件事是我使用的是非常旧版本的 jQuery (1.3.2)。

我敢肯定,我在这里缺少一个明显的解决方案,但是大脑今天无法正常工作。任何帮助将不胜感激!

提前致谢!

4

1 回答 1

7

in 中的第二个参数.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的不再在范围内,你可以省略第二个参数来删除所有绑定的处理程序:

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

当然,如果您有另一个绑定到 的处理程序document.ajaxSuccess,它也将是未绑定的。

于 2012-10-22T21:34:03.627 回答