在我的 Backbone.js 视图中,我定义了如下事件:
events : {
'click .elm' : 'select',
'dblclick .elm' : 'toggle'
},
select: function(e){
e.preventDefault();
console.log('single clicked');
}
toggle : function(e){
e.preventDefault();
console.log('double clicked');
}
我已经将单击和双击事件侦听器绑定到同一个元素.elm
。当我双击该元素时,我会得到以下输出:.elm
x 1月2日x 1月3日x
已尝试preventDefault()
与stopImmediatePropagation()
,但未解决问题.
那么,如何防止单击事件在双击时被触发呢?
3条答案
按热度按时间dgenwo3n1#
jQuery documentation特别建议您不要这样做:
不建议将处理程序同时绑定到同一元素的
click
和dblclick
事件。触发事件的顺序因浏览器而异,有些浏览器在dblclick
之前接收到两个click
事件,而有些浏览器只接收到一个。双击敏感性(被检测为双击的两次单击之间的最长时间)可能因操作系统和浏览器而异,并且通常是用户可配置的。你所看到的正是你所期望的(当然取决于浏览器)。解决你问题的唯一方法是设置一个计时器,手动区分你自己的单击和双击;那么您将不得不调整计时器值并检查各种浏览器和操作系统,直到您得到在大多数地方都能正常工作的东西。
我强烈建议你使用单独的控件来代替单击操作。双击是一个非常不友好的时期,我们只是因为习惯了才忍受它。
s8vozzvw2#
这不是Backbone本身的问题,而是如何处理同一个按钮上的单击和双击事件。
请参阅
1.检测到双击事件时,需要取消单击/mouseup事件
更新:但是如果你不需要处理它的话会更好。请看下面的mu is too short's answer!
ffx8fchx3#
尝试在select & toggle的末尾添加
return false;
。