如何解决两次触发点击事件的麻烦?

  • 我有一个单页的应用程序。
  • 它使用backbone.js。
  • 通过鼠标触发器单击事件一次。
  • 通过触摸设备触发器单击两次事件。
  • 取消绑定单击事件会在触摸设备上停止。

我无法弄清楚从哪里开始寻找。

这是JS:

$('.classy').on('click', 'button', function(){ console.log('clicked'); }) 

我需要一些帮助来弄清楚如何解决这个问题。 我知道我没有提供足够的信息来获得真正的答案。 令我困惑的部分是,这只发生在触摸设备上。 如果我不小心绑定了两个事件或创建了同一个视图的两个实例,那么鼠标点击也不会发生这种情况吗?

谢谢。

编辑:我尝试通过jQuery Mobile使用tap事件。 这有一个奇怪的反应。 它会触发一次事件,看起来就像是完成了,但是当你下次触摸屏幕上的任何地方时,它会再次触发事件。 ……奇怪,有什么想法吗?

我终于找到了问题。 它来自分层的iScrolls。 我不得不在这一点上破解lib,可能是解决这个问题的更好方法,但说明了这一点。

 if (target.tagName != 'SELECT' && target.tagName != 'INPUT' && target.tagName != 'TEXTAREA' && window.iScrollClickFIX != true) { window.iScrollClickFIX = true; setTimeout(function(){ window.iScrollClickFIX = false; }, 1) 

感谢大家的帮助。

这可能不是实际的解决方案……只是想一想

 $('.classy').die('click').on('click', 'button', function(){ console.log('clicked'); }) 

尝试将绑定更改为mousedown而不是click

(假设你正在使用click

也许还有另一个父元素,您也分配了一个单击处理程序。 试试这个,以防止点击(或任何其他事件)冒泡DOM:

 $('.classy').on('click', 'button', function(e){ console.log('clicked'); e.stopPropagation(); }) 

我要做的第一件事就是在Chrome / IE / Firefox中使用调试器设置断点,以确保绑定不会发生两次。

或试试这个:

 $('.classy').off('click').on('click', 'button', function(){ console.log('clicked'); }) 

你可以使用jquery的一个函数而不是点击来摆脱双击问题。