我正在听一个点击事件。触发时,我需要绑定一个不同的事件(对于其他元素),但它会在第一个事件上同时触发。
我的代码:
$(".element1").on("click", function(){
console.log("triggered element1");
$(".element2").on("click", function(){
console.log("triggered element2");
})
});
.element2
每次.element1
单击时,都会绑定一个单独的事件处理程序副本。如果您想防止这种情况发生,请在变量中记住您是否已经绑定了处理程序。
var e2bound = false;
$(".element1").on("click", function(){
console.log("triggered element1");
if(!e2bound){
$(".element2").on("click", function(){
console.log("triggered element2");
})
e2bound=true;
}
});
另一种解决方案是在运行时取消绑定第一个处理程序:
$(".element1").on("click", function e1handler(){
console.log("triggered element1");
$(this).off("click", e1handler);
$(".element2").on("click", function(){
console.log("triggered element2");
})
});
尝试使用.off()
删除事件并使用e.stopPropgation()
$(".element1").on("click", function(){
console.log("triggered element1");
$(".element2").off('click').on("click", function(e){
e.stopPropagation();
console.log("triggered element2");
})
});
频繁绑定和解除绑定是一种不好的做法。如果可能,需要避免它。如果可以显示 HTML 结构会更容易。