繁体   English   中英

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

[英]How can I trouble shoot click events being triggered twice?

  • 我有一个单页的应用程序。
  • 它使用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的一个函数而不是点击来摆脱双击问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM