无法解除全局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)。
我确信这里有一个显而易见的解决方案,但是大脑今天没有用。任何帮助将不胜感激!
提前致谢!
答案 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
的处理程序,它也将是未绑定的。