javascript - keypress 和 keyup - 为什么 keyCode 不同?

标签 javascript keyboard

相关:JavaScript KeyCode vs CharCode

这里有一些代码,您可以在家或在 jsfiddle 中尝试。 :

el.addEventListener( 'keyup', function( e ) { 
    console.log( 'Keyup event' );
    console.log( e.keyCode );
} ); 
el.addEventListener( 'keypress', function( e ) { 
    console.log( 'Keypress event' );
    console.log( e.keyCode );
} );

为什么 keyCode 不同?

我可以理解为什么应该只使用按键,但我不明白的是,在键盘上给出相同的击键的情况下,两个按键事件如何给出不同的键码。

PS:我并不担心旧版浏览器的支持,我在 Chrome 中尝试过这一点,结果很惊讶,而且找不到解释。

最佳答案

这些事件的目的完全不同。使用 keyupkeydown 来识别物理按键,使用 keypress 来识别键入的字符。两者是根本不同的任务,具有不同的事件;不要尝试将两者混合。特别是,keypress 事件上的 keyCode 通常是多余的,不应使用(旧版 IE 除外,但有关更多信息,请参阅下面的链接文档);对于可打印的按键,它通常与 whichcharCode 相同,尽管浏览器之间存在一些差异。

Jan Wolter's article on key events ,已经在另一个答案中链接到,对我来说是关于这个主题的明确词,并且有表格描述每个不同属性为每种类型的关键事件和每个浏览器返回的内容。

关于javascript - keypress 和 keyup - 为什么 keyCode 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25205367/

相关文章:

javascript - 将 JS 警告更改为 DOM 错误消息 div

javascript - 异步函数返回 Promise 挂起

android - 电话 : numeric keyboard for text input

ios - 防止在点击 UITextField 时出现键盘

iphone - iPhone 上的键盘和起床状态

javascript - 如何检查结果是否为 __NSCFNumber?

javascript - 将项目传递到数组并保持格式?

android - 自定义印地语键盘

javascript - 访问导出变量的更改值

iphone - 创建自定义键盘并在您的 iPhone 上配置它