Javascript keypress和keyup-为什么按键代码不同?

Javascript keypress和keyup-为什么按键代码不同?,javascript,keyboard,Javascript,Keyboard,相关的: 以下是一些代码,您可以在家中或在家中尝试: 为什么键码不同 我能理解为什么一个人应该只使用按键,但我不理解的是两个按键事件,在键盘上给定相同的点击键时,如何给出不同的按键代码 PS:我不担心旧式浏览器的支持,我在Chrome中尝试了这一点,但很惊讶,找不到解释。有一个答案正好回答了这个问题。您可能还想看看。这些事件的目的完全不同。使用keypup和keypdown识别物理键,使用keypress识别键入的字符。这两项任务根本不同,事件也不同;不要试图把两者混为一谈。特别是,keyCod

相关的:

以下是一些代码,您可以在家中或在家中尝试:

为什么键码不同

我能理解为什么一个人应该只使用按键,但我不理解的是两个按键事件,在键盘上给定相同的点击键时,如何给出不同的按键代码


PS:我不担心旧式浏览器的支持,我在Chrome中尝试了这一点,但很惊讶,找不到解释。

有一个答案正好回答了这个问题。您可能还想看看。

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


,在另一个答案中已经链接到了,这是我在这个主题上的权威词汇,并且有表描述了每种类型的关键事件和每个浏览器的不同属性返回的内容。

好吧,当我试图将用户条目从表单的一个输入复制到表单的其他部分时,我偶然发现了一个差异,我已经为我的用户锁定了它以供编辑。 我发现,每当用户在完成输入后使用键移动到下一个标签时,当我使用eventListener按键时,复制的条目中的最后一个键盘条目丢失了,这在使用keyup时得到了解决


因此,总之,Keypress监听按键瞬间的状态,忽略按键的结果,而keyup监听按键后的系统状态,包括按键的结果。

quirksmode特别指出:
例如,小写字母“a”和大写字母“a”的键码相同,这就是我不明白的原因。我错过了什么吗?第二篇文章在相关问题中链接:)它们是键盘上的同一个键,只是有不同的修饰语(shift)。键向上/向下用于击键,按键用于键入的文本。因此,它们应该给出相同的键码。为什么它们不取决于事件?不,向上和向下应该给出相同的键码,按应该给出0。但是IE、Opera和Chrome将按键上的字符码称为“keyCode”。我知道它们的用途不同,但这并不能回答这样一个事实,即按键码是不同的,即使按键是相同的。@FlorianMargaine:Jan Wolter的页面上有一些表格显示了每个属性在每个事件中返回的内容。对于WebKit(事实上现在的大多数浏览器),
keyCode
返回与
which
charCode
相同的
keypress
事件,这是与键入的字符相对应的字符代码,而不是按键的键代码(如
keypup
keypdown
)。我必须仔细阅读这部分的文章:
关于keydown和keydup事件,keycodes不是字符码,这种转换会对许多键产生异常结果。没有通用的便携式方法将键码转换为字符。您几乎必须感知浏览器类型,并在此基础上创建键映射。我没有关于国际键盘发送的键盘代码的信息。
:)谢谢你的回答!这个问题有些关联,读起来可能也很有趣。
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 );
} );