我正在尝试编程一个网页,让用户使用条形码扫描仪,使购买的产品清单。由于条形码扫描器通常会模拟正常的键盘输入,所以这并没有什么特别之处。
无论如何,我发现许多人在使用条形码扫描仪时不看屏幕,因此经常没有意识到光标没有聚焦在条形码输入字段上。
因此,每当有键盘输入时,我都会尝试触发一个javascript (播放声音),但网页上没有聚焦的字段。
但我被困住了: 1)我怎么才能让javascript只触发一次,即使在另一个键之后不久按下10个键(它应该在每个扫描的条形码上只播放一次声音,而不是每个数字)。2)如何处理“无字段聚焦”的-issue?有没有办法从DOM中获取这些信息?或者,我是否必须检查页面上的每个字段是否有焦点?这将是不方便的,因为其他字段(除了条形码输入字段)的数量可能不同。
谢谢你的帮助。
贝内迪克。
发布于 2013-01-08 15:50:26
下面是一些代码,它将完成“即使在另一个按键之后不久按下10个键也只有一次”的部分。
它使用计时器在1秒后重置计数器。如果在这一秒内按下另一个按钮,计时器将重新启动,因此它不会意外地重置计数器。出于测试目的,我将阈值设置为3秒,而不是10秒,您可以随意更改它。
(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/
发布于 2013-01-08 15:06:50
如何使javascript只触发一次,即使在另一个键之后立即按下10个键也是如此
你不能理智地那样做。
相反,在函数触发时将变量设置为true,并在X秒后使用setTimeout将其设置为false。在事件处理函数的顶部,测试该变量是否为true,如果为true,则立即返回。
我该如何处理“无字段聚焦”的-issue?
使用绑定到document
对象的事件处理程序测试event.target。
或者,将keydown事件绑定到每个输入(并确保它调用event.stopPropagation)。将您的“无输入”代码绑定到document
对象上的keydown。
https://stackoverflow.com/questions/14209802
复制相似问题