jQuery绑定事件会触发多次?

6
$(".container").on("contextmenu", ".photos-bottom .albums li", function(e) {

$('html').bind('click', function (event) {
    alert(id);
});

return false;
});

当我右键点击(用于上下文菜单)多次,然后左键单击html一次,它会触发警报,显示我右键点击的次数。
所以如果我右键单击一次,然后左键单击,它会显示一个弹出窗口。 如果我右键点击三次,然后左键单击,它会显示三个弹出窗口。
为什么会这样?

你想用那段代码做什么?是要给html元素绑定click事件吗? - gdoron
为什么要在 contextmenu 处理程序中重新绑定 click 处理程序?这没有太多的意义。 - Tomalak
这是一个弹出窗口,当我将点击事件绑定到HTML时,当我在弹出窗口之外单击时,它会触发此事件以关闭菜单和其他内容。(这段代码还有很多,所以你看不到很多) - Dylan Cross
2个回答

19

$('html').unbind('click').bind('click')修复了它。


谢谢,但为了使其正常工作,它只需要在菜单打开时绑定。 - Dylan Cross

4
因为每次上下文菜单事件发生时都会绑定您的点击事件,所以实际上每次右键单击都会添加一个额外的绑定。这就是事件执行次数不断增加的原因。
您应该选择:
a) 在上下文菜单关闭时解除绑定事件,或者
b) 在contextmenu回调函数之外绑定点击事件。

谢谢,是的,经过更多的工作,这样做可以解决问题:$('html').unbind('click').bind('click') - Dylan Cross
1
很高兴能为您服务 :) - Kristian

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