keydown keypress keyup & keyCode vs charCode

一. 键盘事件

  1. 键盘事件触发顺序为:keydown -> keypress -> keyup.
  2. 当用户按下一个字符键不放,会重复触发 keydownkeypress,直到用户松开该键,触发一次 keyup.
  3. 当用户按下一个系统功能键不放,会重复触发 keydown,直到用户松开该键,触发一次 keyup.
  4. keyup 中无法阻止浏览器默认事件,在 keypress 时,浏览器默认行为已经完成。
  5. keypress 不支持上下左右键等系统功能键。

二. keyCode vs charCode
keypress 时的 keyCodecharCodekeydownkeyup 时的 keyCode charCode 不一致:

<script type="text/javascript">
function keyPress(e) {
    console.log( 'Keypress keyCode', e.keyCode);
    console.log( 'Keypress charCode', e.charCode);
}
function keyDown(e) {
    console.log( 'Keydown keyCode', e.keyCode);
    console.log( 'Keydown charCode', e.charCode);
}
function keyUp(e) {
    console.log( 'Keyup keyCode', e.keyCode);
    console.log( 'Keyup charCode', e.charCode);
}
</script>
<body
 onkeypress="keyPress(event);"
 onkeydown="keyDown(event);"
 onkeyup="keyUp(event)"
></body>
Screen Shot 2018-12-25 at 3.32.06 PM.png

https://stackoverflow.com/questions/11030532/keypress-and-keyup-why-is-the-keycode-different 给出的解释:

这些事件的目的完全不同。使用 keyupkeydown 识别物理键,使用keypress 识别键入的字符。这两者是根本不同的任务,有不同的事件,不要试图混合两者。特别是,keypress 事件上的 keyCode 通常是多余的,不应该使用.(旧的IE中除外,Jan Wolter's article on key events); 对于可打印的按键,它通常与charCode 相同,尽管浏览器之间存在一些差异。

event 对象包含一个 keyCode 属性和一个 charCode 属性.

  • 当是 keydown keyup 事件时,keyCode 表示的就是你具体按的键(也称为virtual keycode),charCode 为0.
  • 当捕捉的是 keypress 事件时,keyCode 为0,charCode 指的是你按下的字符(而 IE 只有一个 KeyCode 属性,它指的是你键入的字符(character code))
    鉴于 IE 和 FF 中的区别,建议只使用 keydownkeyup 事件.

参考文章:
详解键盘事件(keydown,keypress,keyup)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 8,862评论 1 11
  • 一、键盘事件基础 1、定义 keydown:按下键盘键 keypress:紧接着keydown事件触发(只有按下字...
    07120665a058阅读 51,115评论 5 33
  • 事件是什么,可以用来做什么,什么时候用到它? 事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间。JavaScr...
    茂茂爱吃鱼阅读 5,403评论 0 16
  • JavaScript 与 HTML 之间的交互是通过事件实现的。事件,就是文档或浏览器窗口中发生的一些特定的交互瞬...
    LemonnYan阅读 3,921评论 0 4
  • 网络上的你来我往 创业路的交锋碰撞 网络创业一夜暴富 在我看来,互联网的生意,本质上都是流量的生意。网络创...
    是小公子啊阅读 1,625评论 0 1