2013-05-06 80 views
2

我的代碼在IE9/IE10,FF,Chrome和Opera上運行時沒有問題,但是在舊版Internet Explorer上運行否鍵盤輸入已處理。onkeydown和onkeyup事件不適用於Internet Explorer 8

我有以下用於處理事件的代碼。它應該只在按下新按鈕時觸發。

lastEvent = void 0; 

heldKeys = {}; 

window.onkeydown = function(event) { 
if (lastEvent && lastEvent.keyCode === event.keyCode) { 
    return; 
} 
lastEvent = event; 
heldKeys[event.keyCode] = true; 
switch (event.which) { 
    case 80: 
    return myamp.userInput("positiv"); 
    case 81: 
    return myamp.userInput("negativ"); 
} 
}; 

window.onkeyup = function(event) { 
    lastEvent = null; 
    return delete heldKeys[event.keyCode]; 
}; 
+0

你使用的是jQuery 2.0嗎? – Tarun 2013-05-06 12:54:20

+5

@Tarun你甚至可以在那裏看到jQuery的暗示嗎?笑 – epascarello 2013-05-06 12:56:24

+0

對不起哥們我回答別人的帖子錯誤:( – Tarun 2013-05-06 13:13:06

回答

1

嘗試

lastEvent = void 0; 

heldKeys = {}; 

window.onkeydown = function(event) { 
    event = event || window.event; //IE does not pass the event object 
    if (lastEvent && lastEvent.keyCode === event.keyCode) { 
     return; 
    } 
    lastEvent = event; 
    heldKeys[event.keyCode] = true; 

    var keyCode = event.which || event.keyCode; //key property also different 

    switch (keyCode) { 
     case 80: 
      return myamp.userInput("positiv"); 
     case 81: 
      return myamp.userInput("negativ"); 
    } 
}; 

window.onkeyup = function(event) { 
    event = event || window.event; 
    lastEvent = null; 
    return delete heldKeys[event.keyCode]; 
}; 
+0

我替換了window.with文檔,並添加了您的更改,它措辭很好!thx給大家! – Penta 2013-05-06 14:43:25

1

您必須使用規範化的密鑰代碼。像這樣:

var keyCode = event.which || event.keyCode; 
3

您需要綁定到文檔而不是窗口。

window.onkeyup = function(event) { 
window.onkeydown = function(event) { 

必須

document.onkeyup = function(event) { 
document.onkeydown = function(event) { 
0

我想盡了各種辦法,但這些仍然沒有在IE8中正常工作。我想出了這個工作是這樣的:

window.onkeyup = function(e) { 
    e = (e) ? e : window.event; // check if e is defined 
    var kc = (e) ? e.which : e.keyCode; // assign keyCode 
    key = (key === undefined) ? e.keyCode : kc; // if keyCode still undefined, reassign it 
    if (kc == 13) { 
     //enter was pressed 
    } 
    // other code 
} 
相關問題