2010-09-10 82 views
2

如何獲得按下的鍵,而不是返回鍵碼,將該鍵放入數組中?如何獲取按鍵並將其放入JavaScript數組中?

例如,用戶將按'a'。然後,代碼將'a' - 不是字符的鍵碼 - 放入數組中。

在此先感謝!

+0

爲什麼使用key屬性? 試試這個: document.onkeydown = function(e){alert(e.key);}; 它不需要將keyCode轉換爲字符。 – MURATSPLAT 2014-12-06 15:38:19

回答

7

這樣的事情呢?

var your_array = []; 

document.onkeydown = function (e) { 
    var keyPress; 

    if (typeof event !== 'undefined') { 
    keyPress = event.keyCode; 
    } 
    else if (e) { 
    keyPress = e.which; 
    } 

    your_array.push(String.fromCharCode(keyPress)); 

    return false; // Prevents the default action 
}; 

UPDATE:如果您需要準確的文字信息(如,大寫小寫從的區別,和其他的東西),一定要看看下面和his other answer@Tim Down's意見。

+0

您需要使用'keypress'事件來獲取輸入的字符,而不是'keydown'事件。 – 2010-09-10 08:58:06

+0

@Tim:根據[quriksmode文章](http://www.quirksmode.org/js/keys.html),'keydown'事件似乎是最可靠的。主要區別在於,在使用'keydown'事件時,您會收到用於小寫和大寫字母的相同'keyCode'(因爲您按相同的鍵)。如果這是可以接受的,取決於OP的建設。我錯過了別的嗎? – 2010-09-10 11:42:33

+0

對於PPK的所有應有的尊重,那個特定的quirksmode表與http://unixpapa.com/js/key.html不同。 quirksmode中的「keyCode和charCode」段落確實包含了它的癥結:'keydown'和'keyup'事件根本不包含字符信息。你可能看到的任何成功都是巧合而不可靠的。如果您擔心Opera缺少對'charCode'的支持,幸運的是Opera支持'which'屬性,因爲它在所有非IE瀏覽器中工作比'charCode'更有用,並且不被quirksmode覆蓋。 – 2010-09-10 14:09:18

2

丹尼爾的回答是完美的,但如果你想獲得實際的字符(不是數字代碼),您可以使用此功能:

String.fromCharCode(code); 

更多信息,請參見MDN

0

在事件處理程序(假設e的事件對象):

myarray.push(String.fromCharCode(e.charCode)); 

注意如何fromCharCode返回給定Unicode字符代碼的字符。另請注意,我如何使用charCode而不是keyCode,因爲它在返回字符代碼方面更爲正確,有時這與字符代碼(您需要的字符)不同。

+0

我也會建議'charCode',但有些瀏覽器不支持它:http://www.quirksmode.org/js/keys.html – 2010-09-10 03:51:34

+0

這是一個困難的情況。一方面,對於兼容的瀏覽器,keycode始終是鍵碼,並且charcode始終是Unicode值。在不兼容的瀏覽器上,charcode不存在,並且keycode因鍵盤代碼或Unicode值而異,具體取決於事件的類型。當然,我們需要Unicode值,但在兼容瀏覽器上的keycode中永遠無法看到。根據正在撰寫的網站的環境和訪問者的人口統計,我想是時候繼續前進,並忽略這些明顯不符合標準的瀏覽器。 – 2010-09-10 04:08:02

+0

哪個事件的事件處理程序? 'charCode'只存在於'keypress'事件中。對於IE,'keypress'事件中的'keyCode'是字符代碼,並且在IE中不能獲得用於非打印鍵的按鍵事件,因此您可以相當可靠地獲取字符代碼。看到我的答案。 – 2010-09-10 09:13:32

3

爲此需要keypress事件。​​和keyup無法可靠地用於獲取角色信息。 Javascript的關鍵事件一個很好的和詳細的說明是在http://unixpapa.com/js/key.html

var charsTyped = []; 

document.onkeypress = function(evt) { 
    evt = evt || window.event; 

    // Ensure we only handle printable keys 
    var charCode = typeof evt.which == "number" ? evt.which : evt.keyCode; 

    if (charCode) { 
     charsTyped.push(String.fromCharCode(charCode)); 
    } 
}; 
0

我寫了一個叫keysight翻譯鍵盤事件成鍵和字符庫。

var yourKeyArray = [] 
node.addEventListener("keydown", function(event) { 
    var key = keysight(event).key  // ignores shift keys, so 'A' is given as 'a' 
    // var char = keysight(event).char // only characters, and differentiates between 'A' and 'a' 

    yourKeyArray.push(key) 
}) 
相關問題