2013-05-27 43 views
6

我們可以管理單擊和雙擊事件,象下面這樣:如何處理長按,然後右鍵單擊事件骨幹JS

events: { 
    "click .tree-toggler": "toggletree", 
    "dblclick .doubleclick" : "doubleclickFunc" 
    }, 

toggletree: function(e){ 
    //code 
    }, 
    doubleclickFunc : function(e){ 
     //code 
    } 

但我要管理右鍵單擊事件,並長按事件。如何處理它們?

+0

我想沒有定義「longclick」事件,所以你必須編寫一個自定義的事件處理程序,它可以使用mousedown和mouseup事件組合來創建。 至於右鍵點擊看看[這個](http://stackoverflow.com/questions/4235426/how-can-i-capture-the-right-click-event-in-javascript) – Phoenix

+0

@Phoenix - 是的,我搜查了文檔和許多網站,但無法找到longclick事件。必須編寫自定義事件處理程序。 – Cindrella

+0

看看['.on()'參考頁面](http://api.jquery.com/on/) – Phoenix

回答

12

我不知道「長按」事件(我什至不知道有一個,並且無法找到一些文檔),但無論如何。 Backbone使用jQuery的on方法將您的事件綁定到DOM。這意味着任何與on一起使用的工具都可以與Backbone.View.events一起工作(不幸的是,您指定的選擇器有一些限制,但除此之外)。

嘗試:

events: { 
    contextmenu: 'onRightClick' 
}, 
onRightClick: function() { 
    alert('it works!'); 
} 
+3

中的第6個示例,一定要調用event.preventDefault()來停止上下文菜單從彈出! – jakee

+0

@jakee取決於他想做什麼,所以我不想說任何事情,並認爲OP知道他在做什麼:) – Loamhoof

+0

右鍵單擊事件工作完美。 +1用於右鍵單擊事件。 – Cindrella

4

可以使用contextmenu事件如前面的答案描述檢測右點擊。以檢測鼠標右鍵單擊另一種方法是jQuery的event.which

clickTree: function(e) { 
    if (event.which === 3) { 
    // handle right clicks 
    this.showtreemenu(e); 
    return; 
    } 
    // handle left clicks 
    this.toggletree(e); 
} 

對於長點擊,又名測量點擊時長,使用mouseupmousedown

events: { 
    'mousedown .measure-click-duration': 'clickStarted', 
    'mouseup .measure-click-duration': 'clickEnded' 
}, 

clickStarted: function(e) { 
    this.clickStartTime = e.timeStamp; 
}, 

clickEnded: function(e) { 
    var clickDuration = e.timeStamp - this.clickStarted; 
    if (clickDuration > 1000) { 
    this.longClick(e); 
    } 
} 

我做了一個fiddle展示contextmenu右點擊次數和上述點擊持續時間。

+0

+1爲Longclick總結。它的工作完美。 – Cindrella