2012-01-28 62 views
6
$(".container").on("contextmenu", ".photos-bottom .albums li", function(e) { 

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

return false; 
}); 

当我右键单击(对于contextmenu)多次,然后左键单击一次html,它会触发警告我右键单击的次数。jQuery绑定多次发射?

所以,如果我右键点击一次,然后左键单击,它会显示一次弹出。 如果我点击三次,然后左键单击,它显示弹出三次。

这是为什么呢?

+0

你想用该代码做什么?将'click'事件附加到'html'? – gdoron 2012-01-28 18:29:46

+0

为什么重新绑定'contextmenu'处理程序中的'click'处理程序?这没有多大意义。 – Tomalak 2012-01-28 18:29:50

+0

这是一个弹出窗口,当我将点击绑定到html时,它是这样的,当我点击弹出窗口之外时,它会触发此事件来关闭菜单,以及其他任何事情。 (还有很多更多的代码到这一点,所以有很多看不到) – 2012-01-28 18:31:34

回答

19

$('html').unbind('click').bind('click')固定它。

+0

而不是将该代码移到'on' contextmenu处理程序之外。 – ShankarSangoli 2012-01-28 19:10:30

+0

谢谢,但为了它的工作,因为它需要它需要只有当菜单已被打开绑定。 – 2012-01-28 19:17:16

+1

谢谢你帮我(Y) – 2016-02-23 11:38:52

4

因为每次发生上下文菜单事件时都会绑定您的点击事件,所以实际上每次右键单击时都会添加一个附加绑定。这是不断增加的事件执行次数的原因。

您应该:

一)取消绑定事件时,上下文菜单关闭,或者

B)的点击事件绑定你的ContextMenu回调函数之外。

+0

谢谢你,是在更多的工作,这样解决它: $(“HTML”)解除绑定(“点击”)绑定(”。点击') – 2012-01-28 18:29:46

+1

很高兴我可以服务:) – Kristian 2012-01-28 18:31:01