为什么keypress事件无法捕获输入的字符?

闲人树珂 阅读 53

在给输入框做实时验证时发现,用keypress事件监听输入,event.charCode返回的值总不正确,比如输入字母a会得到97,但转成字符串却变成undefined…

尝试过这样写:


input.addEventListener('keypress', function(event) {
  const char = String.fromCharCode(event.charCode);
  console.log(char); // 输入"a"时控制台显示""
});

换成keydown事件反而能正确获取keyCode,但不确定这样改是否符合规范?其他同学写的类似功能却能正常显示字符,是不是和浏览器版本有关?

我来解答 赞 5 收藏
二维码
手机扫码查看
1 条解答
Zz振巧
Zz振巧 Lv1
keypress事件早就被废弃了,不同浏览器表现不一致,换成input事件最靠谱。直接上代码:

input.addEventListener('input', function(event) {
const value = event.target.value;
console.log(value.slice(-1)); // 获取最后输入的字符
});

如果非要用键盘事件,推荐keydown配合event.key,简单粗暴:

input.addEventListener('keydown', function(event) {
console.log(event.key); // 直接输出按下的字符
});

检查一下你的浏览器版本,老古董该升级了。
点赞 2
2026-02-14 17:53