不推荐使用keypress,如何获取用户键入的字符?

时间:2019-04-26 05:05:22

标签: javascript keypress keydown keycode

不推荐使用JavaScript keypress事件:
https://developer.mozilla.org/en-US/docs/Web/API/Document/keypress_event

有人建议完全依靠keydown事件,例如:
Keydown是我们唯一需要的键盘事件
https://www.mutuallyhuman.com/blog/2018/03/27/keydown-is-the-only-keyboard-event-we-need/

问题在于keydownkeypress不是同义词。至关重要的是,它们在很多/大多数情况下不会返回相同的字符。 Keydown代表按下键盘上的哪个键,而keypress代表用户实际键入的字符。

在英语中,区分大小写很重要:

letter = String.fromCharCode(event.which); 

按键盘上的键“ a”时,字母keypress为“ a”,而字母keydown为“ A”。

使用JCK语言会使情况变得更加复杂,因为keypress会为国际键盘布局接收正确的字符,而keydown会将所有内容都转换为单字节字符。

现在,在IME合成期间会触发

keydown和keyup事件:
https://www.fxsitecompat.com/en-CA/docs/2018/keydown-and-keyup-events-are-now-fired-during-ime-composition/

因此,在弃用keypress的情况下,考虑到大小写,非ASCII字符和多字节字符,我们在关心用户打算键入的字符时应该使用什么?

相关问题和参考文献:

keyup event always return uppercase letter =>答案建议使用keypress

String.fromCharCode not working on keydown event =>答案建议使用keypress

String.fromCharCode on keypress and keydown are returning wrong characters =>答案指出keypresskeydown事件是不可互换的。

Replacement for deprecated `keypress` DOM event =>答案建议使用keydown,而不必注意它在处理字母大小写,非ASCII字符和多字节字符方面的区别。 另外,建议的替代方法beforeinput似乎没有任何浏览器支持。

Alternative for Keypress Event in Firefox Version 65+ =>该问题已被否决,并建议使用keydownbeforeinput进行评论,而无需解决上述任何陷阱。

0 个答案:

没有答案