JavaScript中keypress事件无法触发问题咨询
问题原因分析
这事儿主要有两个核心原因:
keypress 事件已经被废弃了
这个事件是早年的旧API,现在现代浏览器对它的支持越来越敷衍,行为也不一致,官方早就把它标成废弃状态,推荐用keydown或者keyup来替代。keyCode 在 keypress 里根本不靠谱
keypress 设计出来是用来抓实际输入的字符,不是物理按键的。所以它一般用charCode属性返回字符的ASCII码,而不是物理按键的keyCode。比如你按小写w的时候,keypress的charCode是119(对应字符'w'),keyCode可能也跟着返回119而不是87;只有按住Shift按W打大写的时候,charCode和keyCode才会是87。这就导致你代码里判断keyCode=87根本触发不了——除非你按Shift+W。
而 keydown 是专门针对物理按键的事件,不管能不能打出字符都会触发,而且keyCode稳定对应物理按键的编码,所以你换成keydown就正常工作了。
要是你非得用keypress(真心不推荐),可以改成判断charCode:
addEventListener('keypress', ({charCode}) => { switch(charCode){ case 119: // 小写w case 87: // 大写W alert('press') break; } })
内容的提问来源于stack exchange,提问作者confusedPro
相关产品推荐
相关产品推荐

