js键盘监听为什么在 input 输入框失效?

发布于 2022-08-28 23:10:06 字数 581 浏览 27 评论 0

我原本想用python实现键盘监听。最后选择用js实现,我的初步代码如下

function keypress(){
    var key = document.getElementsByTagName('body')[0];
    key.onkeypress = function(ev){
    alert(ev.keyCode);      
    }
}   

能够简单实现键盘监听了,可是我发现如果是键盘输入框监听就会失效,请问这是什么原因?


应该是网站的原因,我在豆瓣输入框也是可以捕捉到,而google 输入框就不行...


此外我想了解了解,监听的工作原理是什么?从网上查资料得知键盘一般由按键、导电塑胶、编码器以及接口电路组成,接口电路产生信号的一系列过程都是硬件部分处理,我猜测js键盘监听应该是监听这个信号,那么一般键盘监听来说,是怎么样处理这个信号的?js的onkeypress事件监听的原理又是什么?这个有没有源码可以看?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

天暗了我发光 2022-09-04 23:10:06

onkeypress 只有在产生可打印字符时才会发生,且你写的代码不兼容IE低版本

泡沫很甜 2022-09-04 23:10:06

谢邀。不知道有没有误解题主的意思,首先看了下你的代码,监听键盘的 keypress 事件,代码看上去是没问题的,于是我到谷歌的输入框里测试了一下:

请输入图片描述

chrome 下,输入框内输入后,Keypress 事件被捕捉到了,并没有出现题主所说的情况。:)
另外建议题主用 keydown 事件,因为 keydownkeypress 相比能捕捉更多按键(当然,我不太清楚题主你的需求,keypress 也有比 keydown 优异的地方)。测试如下:

document.querySelector('body').addEventListener('keydown', function(e) {
  alert(e.which);
}, false);

上述代码依然可以在谷歌输入框中捕获到键盘事件。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文