jquery - MouseUp 和 DoubleClick 都使用 Backbone js 连接到单独的事件处理函数

标签 jquery backbone.js event-handling double-click mouseup

我有一个图表应用程序,其中我使用 Backbone.js 在图表图像的不同“区域”上附加用于 mouseup 和 doubleclick 事件的单独处理程序。

我需要 mouseup 来检测用户是否单击了图表图像的“区域”部分上的左键或右键,并根据情况重定向我的流程。另外,我需要双击来放大或最小化包含图表图像的面板。

这就是问题所在。由于每次双击都会隐式调用 mouseup,因此我的最大化/最小化功能会干扰左/右键单击功能。

我尝试使用各种技术(例如超时)来检查单击鼠标后是否紧接着双击(如以下线程中所建议的: Need to cancel click/mouseup events when double-click event detected

这对我不起作用。另外,我在同一页面上有包含图表的 View 的不同对象,因此我在每个事件处理程序中附加唯一的 ID 以区分它们,我还尝试了简单的标志集重置方法来检测双击并在发生双击时防止 mouseup,但因为事件层次结构中 mouseup 在双击之前发生,也失败了。

总而言之,请帮忙!提前致谢

最佳答案

遵循the answer you linked中给出的建议,您只需对 mouseup 的回调进行反跳并检查给定时间段内是否发生第二次单击。

假设以这种方式定义 View ( http://jsfiddle.net/nikoshr/4KSZx/ )

var V = Backbone.View.extend({
    events: {
        'mouseup button': 'onmouseup',
        'dblclick button': 'ondblclick'
    },

    onmouseup: function() {
        console.log('mouseup');
    },    
    ondblclick: function() {
        console.log('dblclick');
    }
});

您可以修改它并“取消” mouseup 事件:

var V = Backbone.View.extend({
    events: {
        'mouseup button': _.debounce(function(e) {
            if (this.doucleckicked) {
                this.doucleckicked = false;
            } else {
                this.onmouseup.call(this, e);
            }
        }, 300),
        'dblclick button': function(e) {
            this.doucleckicked = true;
            this.ondblclick.call(this, e);
        }
    },

    onmouseup: function() {
        console.log('mouseup');
    },    
    ondblclick: function() {
        console.log('dblclick');
    }
});

还有一个演示 http://jsfiddle.net/4KSZx/6/

关于jquery - MouseUp 和 DoubleClick 都使用 Backbone js 连接到单独的事件处理函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15566597/

相关文章:

c# - 为什么我们*应该*使用 EventHandler

c# - 为什么尝试在WPF/C#中注册所有事件时出现构建错误?

javascript - 简单的用户脚本在任何地方都不起作用?

jquery mouseenter mouseleave 带数据表,在 chrome 或 IE 中不起作用

php - 使用 jquery 遍历 php 变量 div 类

javascript - 未捕获的类型错误 : Cannot call method 'toJSON' of undefined in backbone

javascript - 无法让 Disqus 在单页应用程序中正常工作

javascript - Marionette 2.0 ViewDestroyedError : Cannot use a view thats already been destroyed

javascript - 使用 jquery 隐藏动态创建的元素

ScalaFx:具有一流功能的事件处理程序