您当前的代码并没有完全按照您的想法执行。每次单击A
时,它都会向 中添加一个新的单击处理程序B
。因此,如果您单击A
3 次,您将获得 3 个单击处理程序B
,所有这些处理程序都在单击 B 时执行。
一种解决方法是在 As click handler 中取消注册 Bs click handler,例如:
$('A').click(function(){
// Ensure we only ever have one click-handler on B
// by clearing existing handlers before adding our
// new one.
$('B').unbind('click').click(function(){
console.log("hello");
})
})
但是,此代码具有删除所有s 处理程序的副作用B
,这是您可能不想要的。仅删除特定处理程序的更强大的版本是创建一个命名处理程序,而不是一个匿名处理程序,然后添加和删除它。这使您可以定位所需的特定处理程序。您也可以使用命名空间来执行此操作(请参阅取消绑定的文档并查找“命名空间”)。
var helloHandlerForB = function() { console.log("hello"); };
$('A').click(function(){
// Ensure we only ever have one click-handler on B
// by clearing existing handlers before adding our
// new one.
$('B').unbind('click', helloHandlerForB).click(helloHandlerForB);
})