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

时间:2012-11-08 09:40:36

标签: javascript javascript-events backbone.js

在我的Backbone View中,我定义了这样的事件:

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。当我双击这个元素时,我得到了这个输出:

single clicked single clicked double clicked

尝试preventDefault()stopImmediatePropagation()并且没有解决问题。

那么,当我双击时,如何防止单击事件被触发?

3 个答案:

答案 0 :(得分:7)

jQuery documentation特别推荐您正在做的事情:

  

不建议将处理程序绑定到同一元素的clickdblclick事件。触发的事件序列因浏览器而异,其中一些事件在click之前接收到两个dblclick事件,而其他事件仅在一个事件中接收。双击灵敏度(双击检测到的点击之间的最长时间)可能因操作系统和浏览器而异,并且通常可由用户配置。

您所看到的正是预期的结果(当然取决于浏览器)。解决问题的唯一方法是设置计时器并手动区分单击和双击自己;然后你将不得不调整计时器值并检查各种浏览器和操作系统,直到你得到一些假装在大多数地方工作的东西。

我强烈建议您使用单击操作代替单独的控件。双击是非常不友好的时期,我们只是忍受它,因为我们已经习惯了。

答案 1 :(得分:5)

这不是Backbone本身的问题。 它是关于如何在同一个按钮上处理单击和双击事件。

  1. Need to cancel click/mouseup events when double-click event detected

  2. Javascript with jQuery: Click and double click on same element, different effect, one disables the other

  3. 更新:但如果您不必处理它会更好。请参阅下面的mu is too short's answer

答案 2 :(得分:0)

尝试在select& amp;末尾添加return false;切换。