10

在我的主干视图中,我定义了这样的事件:

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()并没有解决问题。

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

4

3 回答 3

7

jQuery 文档特别建议您不要这样做:

不建议将处理程序绑定到同一元素的 theclickdblclickevents。触发的事件顺序因浏览器而异,有的在一个click之前接收两个事件,dblclick而另一些则只接收一个。双击灵敏度(被检测为双击的两次单击之间的最长时间)可能因操作系统和浏览器而异,并且通常是用户可配置的。

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

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

于 2012-11-08T17:33:07.020 回答
5

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

  1. 检测到双击事件时需要取消单击/鼠标事件

  2. 带有jQuery的Javascript:单击并双击相同的元素,不同的效果,一个禁用另一个

更新:但如果你不必处理它会更好。请参阅下面的 mu is too short 的答案

于 2012-11-08T11:14:46.207 回答
0

尝试return false;在选择和切换的末尾添加。

于 2012-11-08T10:55:12.523 回答