Javascript 如何对触发两次的单击事件进行故障排除? 我有一个单页应用程序 它使用backbone.js 通过鼠标触发器单击事件一次 通过触摸设备触发器单击事件两次 解除一键事件的绑定将停止触摸设备上的两个操作

Javascript 如何对触发两次的单击事件进行故障排除? 我有一个单页应用程序 它使用backbone.js 通过鼠标触发器单击事件一次 通过触摸设备触发器单击事件两次 解除一键事件的绑定将停止触摸设备上的两个操作,javascript,jquery,Javascript,Jquery,我不知道从哪里开始找 这是JS: $('.classy').on('click', 'button', function(){ console.log('clicked'); }) 我需要一些帮助,找出如何解决这个问题。我知道我没有提供足够的信息来得到真正的答案。让我困惑的是,这只发生在触摸设备上。如果我不小心绑定了两个事件或创建了同一视图的两个实例,那么鼠标点击也会发生这种情况吗 多谢各位 编辑:我尝试通过jQuery Mobile使用tap事件。这有一种奇怪的反应。它会触发一次事件

我不知道从哪里开始找

这是JS:

$('.classy').on('click', 'button', function(){
    console.log('clicked');
})
我需要一些帮助,找出如何解决这个问题。我知道我没有提供足够的信息来得到真正的答案。让我困惑的是,这只发生在触摸设备上。如果我不小心绑定了两个事件或创建了同一视图的两个实例,那么鼠标点击也会发生这种情况吗

多谢各位

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

我终于找到了问题所在。那是从我的书卷里传来的。在这一点上,我不得不破解lib,这可能是一个更好的修复方法,但说明了这一点

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

谢谢大家的帮助。

尝试将您的绑定更改为
mousedown
,而不是
单击


(假设您使用的是
click

可能还有另一个父元素,您也分配了一个click处理程序。尝试此操作,以防止单击(或任何其他事件)冒泡到DOM中:

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

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

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

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

或者试试这个:

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

您可以使用jquery的一个功能而不是单击来消除双击问题。

您是否尝试过删除
'click'
'button'
以查看发生了什么?我已经尝试过了。click.bind.live-它们都以相同的方式工作。签出后,它们有类似的问题,结果相同。Hrrm,好主意,但结果是事件仍发生了两次。让我困惑的是,这只发生在触摸设备上。如果我无意中绑定了两个事件或创建了同一视图的两个实例,那么鼠标单击也会发生这种情况吗?在jQuery中死亡-从元素中删除以前使用.live()附加的所有事件处理程序。这会导致相同的行为。仍然发射两次,仅在触摸设备上。尝试过。关闭,但不起作用。我在Chrome/IE/Firefox上没有任何问题,因为它们是鼠标事件。日志只发生一次。看起来蒲公英可能在评论中回答了。但是。。。我需要能够多次单击该按钮,而不是在
上单击
而不是单击?您可以将鼠标悬停和单击事件分开,而不是单击事件。在触摸的情况下,设备悬停将在第一次触摸后调用,而其他悬停调用中的悬停调用将被调用。但是.one()是否只允许事件触发一次?我必须在每次单击后重新绑定事件?是的。如果您正在使用一个,则每次都应重新绑定。