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