【问题标题】:Backbone.js - Both click and double click event getting fired on an elementBackbone.js - 在元素上触发单击和双击事件
【发布时间】:2012-10-28 11:44:15
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript backbone.js backbone-events


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      这不是 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

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

      【讨论】:

        【解决方案3】:

        jQuery documentation 明确建议您不要这样做:

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

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

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

        【讨论】:

        • 嗯。那么我必须改变我的应用程序行为。
        猜你喜欢
        • 2012-01-25
        • 2013-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多