【问题标题】:jQuery bind firing multiple times?jQuery绑定多次触发?
【发布时间】:2014-06-06 20:51:44
【问题描述】:
$(".container").on("contextmenu", ".photos-bottom .albums li", function(e) {

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

return false;
});

当我多次右键单击(用于上下文菜单)然后左键单击一次 html 时,它会触发我右键单击次数的警报。

因此,如果我右键单击一次,然后单击左键,它会显示一次弹出窗口。 如果我右键单击三下,然后单击左键,它会显示三次弹出窗口。

为什么会这样?

【问题讨论】:

  • 你想用那个代码做什么?将click 事件附加到html?
  • 为什么要在contextmenu处理程序中重新绑定click处理程序?这没有多大意义。
  • 这是一个弹出窗口,当我将 click 绑定到 html 时,当我在弹出窗口之外单击时,它会触发此事件以关闭菜单以及其他任何内容。 (这里有很多代码,所以有很多你看不到)

标签: javascript jquery bind


【解决方案1】:

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

【讨论】:

  • 谢谢,但为了让它按需要工作,它只需要在打开菜单时绑定。
【解决方案2】:

因为每次发生上下文菜单事件时都会绑定单击事件,所以实际上每次右键单击时都会添加额外的绑定。这就是事件执行数量不断增长的原因。

您应该:

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

b) 在上下文菜单回调函数之外绑定点击事件。

【讨论】:

  • 谢谢,是的,在做更多的工作后会修复它:$('html').unbind('click').bind('click')
  • 很高兴能为您服务 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-18
  • 1970-01-01
  • 1970-01-01
  • 2020-06-30
  • 2011-07-10
  • 2016-03-14
  • 1970-01-01
相关资源
最近更新 更多