2009-12-04 93 views
68

我想知道在純javascript中跨瀏覽器兼容的方式按什麼字符鍵。如何找出按下哪個字符鍵?

+0

不都是爲回答這個問題: 「什麼按下鍵_was_?」如果在執行時,JavaScript代碼想知道鍵盤上的按鍵是否被按住? – mwardm 2016-10-07 16:24:27

+0

'event.key'會直接給你按字符 – Gibolt 2017-09-05 18:04:45

回答

117

「清除」 的JavaScript:

<script type="text/javascript"> 
    function myKeyPress(e){ 
    var keynum; 

    if(window.event) { // IE      
     keynum = e.keyCode; 
    } else if(e.which){ // Netscape/Firefox/Opera     
     keynum = e.which; 
    } 

    alert(String.fromCharCode(keynum)); 
    } 
</script> 

<form> 
    <input type="text" onkeypress="return myKeyPress(event)" /> 
</form> 

JQuery的:

$(document).keypress(function(event){ 
    alert(String.fromCharCode(event.which)); 
}); 
+6

這對字母符號可以正常工作,但點/花鼓和其他typogtaphic符號呢? – VoVaVc 2014-01-24 15:13:13

+5

@VoVaVc:它也適用於這些人。關鍵的是使用'keypress'事件,它給你一個字符代碼,而不是'keyup'或'keydown',它給你一個關鍵代碼。 – 2015-02-09 14:12:31

+0

'e.which'已棄用。使用'e.key'代替,如'如果(e.key == 'Z')' – aljgom 2017-04-08 18:09:40

2

看一看本網站的跨瀏覽器的不一致性 http://www.quirksmode.org/js/keys.html

+0

只在某些瀏覽器(特別是未火狐)的按鍵事件。 – 2009-12-04 12:44:55

+0

@Tim好點 - 其實我會把它說出來。 – Matt 2009-12-04 12:47:04

1

使用這一個:

function onKeyPress(evt){ 
    evt = (evt) ? evt : (window.event) ? event : null; 
    if (evt) 
    { 
    var charCode = (evt.charCode) ? evt.charCode :((evt.keyCode) ? evt.keyCode :((evt.which) ? evt.which : 0)); 
    if (charCode == 13) 
     alert('User pressed Enter'); 
    } 
} 
22

這裏對於這個問題的一百萬副本,但在這裏再次去反正:

document.onkeypress = function(evt) { 
    evt = evt || window.event; 
    var charCode = evt.keyCode || evt.which; 
    var charStr = String.fromCharCode(charCode); 
    alert(charStr); 
}; 

我看到過的重要事件最好的參考就是http://unixpapa.com/js/key.html

1
**check this out** 
<!DOCTYPE html> 
<html> 
<head> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
<script> 
$(document).ready(function(){ 
    $(document).keypress(function(e) 
     { 

      var keynum; 
      if(window.event) 
      { // IE     
       keynum = e.keyCode; 
      } 
       else if(e.which) 
        { 
        // Netscape/Firefox/Opera     
        keynum = e.which; 
        } 
        alert(String.fromCharCode(keynum)); 
        var unicode=e.keyCode? e.keyCode : e.charCode; 
        alert(unicode); 
     }); 
}); 

</script> 
</head> 
<body> 

<input type="text"></input> 
</body> 
</html> 
+1

這不是@ Coyod 2009年答案的近似重複嗎? – 2015-05-27 11:25:29

1

我最喜歡的圖書館之一,以複雜的方式做到這一點是Mousetrap

它配備備有各種插件,其中之一是record插件,它可以識別按下的鍵的一個序列。

例子:

<script> 
    function recordSequence() { 
     Mousetrap.record(function(sequence) { 
      // sequence is an array like ['ctrl+k', 'c'] 
      alert('You pressed: ' + sequence.join(' ')); 
     }); 
    } 
</script> 


<button onclick="recordSequence()">Record</button> 
+0

沒錯。會做。 – 2015-11-13 16:24:29

+0

@DanLowe我剛剛添加了一個片段。 – 2015-11-13 16:30:17

3

最近的和更清潔:使用event.key。沒有更多的任意數字代碼!

node.addEventListener('keydown', function(event) { 
    const key = event.key; // "a", "1", "Shift", etc. 
}); 

如果你想被輸入確保只有單個字符,檢查key.length === 1,或者說,它是你所期望的人物之一。

Mozilla Docs

Supported Browsers

-1
document.onkeypress = function(event){ 
    alert(event.key) 
} 
相關問題