取消绑定jQuery ajaxSuccess事件

时间:2012-10-22 21:18:06

标签: javascript jquery

无法解除全局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)。

我确信这里有一个显而易见的解决方案,但是大脑今天没有用。任何帮助将不胜感激!

提前致谢!

1 个答案:

答案 0 :(得分:6)

.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的处理程序,它也将是未绑定的。