如何找出按下了哪个字符键?

IT技术 javascript dom-events keypress
2021-01-10 21:27:36

我想找出在纯 Javascript 中以跨浏览器兼容的方式按下了什么字符键。

6个回答

“清除”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));
}
<input type="text" onkeypress="return myKeyPress(event)" />

查询:

$("input").keypress(function(event){
  alert(String.fromCharCode(event.which)); 
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input/>

@aljgom,e.key仍然没有完整的浏览器支持。
2021-03-21 21:27:36
不适用于您必须按 shift 才能生成的符号,例如 !
2021-03-31 21:27:36
这适用于字母字符,但是点/括号和其他印刷符号呢?
2021-04-02 21:27:36
所有主要浏览器现在都支持 @AndyMercer 密钥:developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/...
2021-04-03 21:27:36
@VoVaVc:它也适用于那些人。关键是使用keypress事件,它给你一个字符代码,而不是keyupkeydown给你一个关键代码。
2021-04-09 21:27:36

这个问题在这里有一百万个重复,但无论如何这里再次重复:

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

更新更干净:使用event.key. 没有更多的任意数字代码!

注意:旧属性(.keyCode.which)已弃用。

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

如果您想确保只输入单个字符,请检查key.length === 1,或者它是您期望的字符之一。

Mozilla 文档

支持的浏览器

某些移动设备的 keydown 不起作用它返回 undefine
2021-03-14 21:27:36
这是用于 node.js 的吗?
2021-03-28 21:27:36
不,节点只是意味着任何 DOM 元素。如果你有 Node.js 连接到 UI,我想它会工作
2021-04-04 21:27:36

尝试:

<table>
  <tr>
    <td>Key:</td>
    <td id="key"></td>
  </tr>
  <tr>
    <td>Key Code:</td>
    <td id="keyCode"></td>
  </tr>
  <tr>
    <td>Event Code:</td>
    <td id="eventCode"></td>
  </tr>
</table>
<script type="text/javascript">
  window.addEventListener("keydown", function(e) {
    //tested in IE/Chrome/Firefox
    document.getElementById("key").innerHTML = e.key;
    document.getElementById("keyCode").innerHTML = e.keyCode;
    document.getElementById("eventCode").innerHTML = e.code;
  })
</script>

*注意:这适用于“运行代码片段”

这个网站和我上面的代码一样:Keycode.info

这是另一个类似的站点,但有一些额外的选项:keyjs.dev
2021-03-16 21:27:36
在 chrome、xfce、意大利语键盘、西班牙语布局上,按“<”返回“/”,这是英语键盘中的键。为什么?!?以前的一些 chrome 版本不是那样的!
2021-04-07 21:27:36

使用这个:

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');
  }
}