我正在听一个点击事件。触发后,我需要绑定一个不同的事件(对于其他元素),但它会在第一个事件上继续触发。
我的代码:
$(".element1").on("click", function(){
console.log("triggered element1");
$(".element2").on("click", function(){
console.log("triggered element2");
})
});
答案 0 :(得分:1)
.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");
})
});
答案 1 :(得分:0)
尝试使用.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结构会更容易。