2011-05-17 22 views
11

我試圖從視圖捕獲關鍵事件如下:如何從視圖中捕獲關鍵事件?

myView = Backbone.View.extend({ 

    el: $('#someDiv'), 
    initialize: function(){ 
    // initialize some subviews 
    }, 
    render: function(){ 
    return this; 
    }, 
    events:{ 
    'keypress #someDiv': 'showKey' 
    }, 
    showKey: function(e){ 
    console.log(e.keyCode); 
    } 
}) 

這不起作用?

ps:視圖或其子視圖中沒有[input]元素。我只需要知道用戶是否按下了任何鍵,然後在視圖上做了些什麼。

+0

我用你的代碼和工作,你需要記住的唯一的事情是元素要添加一個事件必須在「查看el「例如,您要添加事件的元素必須位於今天剛剛發現的」#someDiv「 – 2012-06-30 20:46:40

回答

4

按下按鍵將轉到頁面上的焦點元素。如果您的視圖中沒有任何內容,並且視圖沒有任何焦點,那麼您將不會有任何按鍵事件。

(順便說一句,如果你想爲this.el做按鍵事件,做到「按鍵」:「showKey」)

在你上面的代碼中,身體會最有可能接收所有按鍵事件。

14

您可以在視圖初始化做到這一點()函數:

_.bindAll(this, 'on_keypress'); 
$(document).bind('keypress', this.on_keypress); 
+0

之內:如果您在按鍵中沒有使用chrome的問題,請使用」keydown「事件而不是按鍵。 – 2011-07-15 14:13:01

+13

將按鍵綁定到文檔時要小心,當您移除視圖時,它不會與其餘事件解除綁定。當你刪除你的視圖時,還可以調用: $(document).unbind('keypress','on_keypress'); – MrGrigg 2011-10-20 01:26:57

+0

當我刪除了我的視圖時,我必須執行'$(document).unbind('keypress',this.on_keypress)''。幾乎像MrGrigg的回答,但傳遞實際的功能,而不是它的名字的字符串。 – 2014-07-18 14:10:34