按键被弃用,如何获取用户输入的字符?

aug*_*tin 6 javascript keycode keypress keydown

keypress不推荐使用javascript事件: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-我们需要/

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

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

letter = String.fromCharCode(event.which); 
Run Code Online (Sandbox Code Playgroud)

当按下键盘上的“a”键时,字母是“a”加keypress,但它是“A”加keydown

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 事件总是返回大写字母 => 答案推荐使用keypress.

String.fromCharCode 不适用于 keydown 事件 => 答案建议使用keypress.

keypress 和 keydown 上的 String.fromCharCode 返回错误的字符 => 答案指出keypresskeydown事件不可互换。

替换已弃用的 `keypress` DOM 事件 => 答案建议使用keydown而不注意它在处理字母大小写、非 ascii 字符和多字节字符方面的区别。此外,建议的替代方案beforeinput似乎没有任何浏览器支持。

Firefox 版本 65+ 中 Keypress 事件的替代方案 => 问题被简要否决,评论建议使用keydownbeforeinput不使用上述任何陷阱。