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

10

在我的Backbone视图中,我定义了如下的事件:

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个回答

7

jQuery文档明确建议不要做你正在尝试的事情:

对于同一元素,绑定 clickdblclick 事件处理程序是不明智的。触发的事件顺序因浏览器而异,有些在 dblclick 之前触发了两个 click 事件,而其他浏览器只触发了一个。双击灵敏度(被检测为双击的点击之间的最大时间)可以因操作系统和浏览器而异,并且通常是用户可配置的。

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

我强烈建议你使用单击操作的独立控件。双击操作本来就很不友好,我们只是因为习惯了才忍受它。


嗯,我必须改变我的应用程序行为。 - Veera

5

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接