解除绑定 jQuery 的 ajaxSuccess 事件。

7

我遇到了取消全局ajaxSuccess事件处理程序的问题。

每次我运行以下代码并测试一个ajax函数时,方法钩子都会被调用,而且每次都会调用与我运行代码的次数相同的次数。

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

我也尝试了仅使用


$(document).ajaxSuccess(hook);

但上述内容并没有替换原有的钩子引用,并且具有与上述相同的行为特征。
可能相关的一件事是,我正在使用一个非常旧的版本的 jQuery(1.3.2)。
我确定我在这里忽略了一个显而易见的解决方案,但是我的大脑今天无法工作。任何帮助将不胜感激!
提前致谢!
1个回答

7
.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 上,它也将被解除绑定。

谢谢您向我解释,阅读了您的答案后,问题变得非常简单。谢谢! - Bob Smith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接