首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果没有字段被聚焦,则在键盘输入时触发javascript

如果没有字段被聚焦,则在键盘输入时触发javascript
EN

Stack Overflow用户
提问于 2013-01-08 15:02:10
回答 2查看 107关注 0票数 0

我正在尝试编程一个网页,让用户使用条形码扫描仪,使购买的产品清单。由于条形码扫描器通常会模拟正常的键盘输入,所以这并没有什么特别之处。

无论如何,我发现许多人在使用条形码扫描仪时不看屏幕,因此经常没有意识到光标没有聚焦在条形码输入字段上。

因此,每当有键盘输入时,我都会尝试触发一个javascript (播放声音),但网页上没有聚焦的字段。

但我被困住了: 1)我怎么才能让javascript只触发一次,即使在另一个键之后不久按下10个键(它应该在每个扫描的条形码上只播放一次声音,而不是每个数字)。2)如何处理“无字段聚焦”的-issue?有没有办法从DOM中获取这些信息?或者,我是否必须检查页面上的每个字段是否有焦点?这将是不方便的,因为其他字段(除了条形码输入字段)的数量可能不同。

谢谢你的帮助。

贝内迪克。

EN

回答 2

Stack Overflow用户

发布于 2013-01-08 15:50:26

下面是一些代码,它将完成“即使在另一个按键之后不久按下10个键也只有一次”的部分。

它使用计时器在1秒后重置计数器。如果在这一秒内按下另一个按钮,计时器将重新启动,因此它不会意外地重置计数器。出于测试目的,我将阈值设置为3秒,而不是10秒,您可以随意更改它。

代码语言:javascript
运行
复制
(function () {
    var counter = 0,
        timer,
        threshold = 3;


    document.addEventListener('keydown', function () {

        window.clearTimeout(timer);

        counter += 1;

        if (counter >= threshold) {
            console.log('do whatever you want');
            counter = 0;
        }

        timer = window.setTimeout(function () {
            counter = 0;
        }, 1000);

    });
})()

http://jsfiddle.net/gJC3M/2/

票数 1
EN

Stack Overflow用户

发布于 2013-01-08 15:06:50

如何使javascript只触发一次,即使在另一个键之后立即按下10个键也是如此

你不能理智地那样做。

相反,在函数触发时将变量设置为true,并在X秒后使用setTimeout将其设置为false。在事件处理函数的顶部,测试该变量是否为true,如果为true,则立即返回。

我该如何处理“无字段聚焦”的-issue?

使用绑定到document对象的事件处理程序测试event.target

或者,将keydown事件绑定到每个输入(并确保它调用event.stopPropagation)。将您的“无输入”代码绑定到document对象上的keydown。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14209802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档