2014-12-02 92 views
2
this.element.addEventListener('keydown', function(e) { 

    if ((e.keyCode || e.which) == 32) { 
     self.space_down(e); 
    } 
}, true); 

this.element.addEventListener('keyup', function(e) { 

    if ((e.keyCode || e.which) == 32) { 
     self.space_up(e); 
    } 
}, true); 

這是行不通的,爲什麼呢?iv'e類似的代碼看鼠標事件,並能正常工作,有沒有解決方案?的addEventListener KEYUP KEYDOWN與鍵碼不工作

+1

定義「不工作」。你是說事件處理程序根本沒有被調用,或者它沒有進入'if'語句或什麼? – Rhumborl 2014-12-02 09:04:09

回答

7

嘗試綁定事件到documentwindow。如果某個元素不可聚焦且未聚焦,則鍵盤事件不會派發給它,而是派發到文檔根目錄(<body>)。

+0

記住非常重要和有用。另一個提示是,如果您在全局對象(例如'document.body')上監聽'keyup' /'keydown'(或其他)事件,您可以區分源自聚焦元素的事件(例如'input'標籤)並通過檢查事件對象的'target'屬性從事件處理程序中的這個全局對象。如果事件來自聚焦的元素,則「target」將是''=='''全局'對象(例如'document.body')。 – origo 2016-11-05 15:20:45