Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按键被弃用,如何获得用户键入的字符?_Javascript_Keypress_Keydown_Keycode - Fatal编程技术网

Javascript 按键被弃用,如何获得用户键入的字符?

Javascript 按键被弃用,如何获得用户键入的字符?,javascript,keypress,keydown,keycode,Javascript,Keypress,Keydown,Keycode,javascriptkeypress事件已被弃用: 有些人建议只依赖于按键事件,例如: Keydown是我们唯一需要的键盘事件 问题在于keydown和keypress不是同义词。关键是,在许多/大多数情况下,它们不会返回相同的字符Keydown表示按下了键盘上的哪个键,而keypress表示用户实际键入的字符 在英语中,区分下列情况很重要: letter = String.fromCharCode(event.which); 按键盘上的“a”键时,字母在按下键时为“a”,但在按下键时为

javascript
keypress
事件已被弃用:

有些人建议只依赖于
按键
事件,例如:
Keydown
是我们唯一需要的键盘事件


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

在英语中,区分下列情况很重要:

letter = String.fromCharCode(event.which); 
按键盘上的“a”键时,字母在按下
键时为“a”,但在按下
键时为“a”

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

keydown和keyup事件现在在IME合成期间触发:

因此,随着
keypress
被弃用,考虑到大小写、非ASCII字符和多字节字符,当我们关心用户想要键入的字符时,应该使用什么

相关问题和参考资料:

=>答案建议使用
按键

=>答案建议使用
按键

=>答案指出,
keypress
keydown
事件不能互换

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


=>问题被简要否决,有一条评论建议在输入之前使用
keydown
beforeinput
,但未解决上述任何缺陷

在输入前使用
键下键
而不是
键下键
,然后阅读而不是
键下键
键下键
(这两种键在几年前都已被弃用)。@Teemu谢谢!我试试看。您可以将此作为一个答案发布,无论是否带有示例代码,因为我所做的所有研究都让我找到了多年的解决方案,而我未能从链接参考和我参考的其他搜索结果中理解正确的解决方案。我确信我不是唯一一个在这方面苦苦挣扎的人,正如链接的被否决的问题所表明的那样。
keydown
event.key
似乎确实是一条路要走,除了需要更多的额外代码之外,因为现在当用户键入“a”时,我会得到输出“ShiftA”。。。我会弄明白的,最终…;)输出不是“ShiftA”,而是“Shift”和“A”,这两个键击的自身输出。对于除基本ASCII码以外的旧代码,您得到了可靠的结果,数字数据表示键在键盘上的位置,而不是字符。无论如何,从
key
属性检查不可打印字符相对容易,只需检查长度,如果大于1,则该字符不可打印。