Backbone.js -在元素上同时触发单击和双击事件

cgvd09ve  于 2022-11-10  发布在  其他
关注(0)|答案(3)|浏览(155)

在我的 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。当我双击该元素时,我会得到以下输出:
.elmx 1月2日x 1月3日x
已尝试preventDefault()stopImmediatePropagation(),但未解决问题.
那么,如何防止单击事件在双击时被触发呢?

dgenwo3n

dgenwo3n1#

jQuery documentation特别建议您不要这样做:
不建议将处理程序同时绑定到同一元素的clickdblclick事件。触发事件的顺序因浏览器而异,有些浏览器在dblclick之前接收到两个click事件,而有些浏览器只接收到一个。双击敏感性(被检测为双击的两次单击之间的最长时间)可能因操作系统和浏览器而异,并且通常是用户可配置的。
你所看到的正是你所期望的(当然取决于浏览器)。解决你问题的唯一方法是设置一个计时器,手动区分你自己的单击和双击;那么您将不得不调整计时器值并检查各种浏览器和操作系统,直到您得到在大多数地方都能正常工作的东西。
我强烈建议你使用单独的控件来代替单击操作。双击是一个非常不友好的时期,我们只是因为习惯了才忍受它。

s8vozzvw

s8vozzvw2#

这不是Backbone本身的问题,而是如何处理同一个按钮上的单击和双击事件。
请参阅
1.检测到双击事件时,需要取消单击/mouseup事件

  1. Javascript with jQuery: Click and double click on same element, different effect, one disables the other
    更新:但是如果你不需要处理它的话会更好。请看下面的mu is too short's answer
ffx8fchx

ffx8fchx3#

尝试在select & toggle的末尾添加return false;

相关问题