dom events -如果没有字段被聚焦,则在键盘输入时触发JavaScript
dom events - Fire JavaScript at keyboard entry if no field is focused
我正在尝试编程一个网页,让用户使用条码扫描器来制作购买的产品列表。因为条形码扫描器通常模拟正常的键盘输入,所以这没什么特别的。
无论如何,我发现很多人在使用条形码扫描器时不看屏幕,因此经常没有意识到光标没有集中在条形码输入字段上。
因此,我尝试在每次有键盘输入并且没有字段集中在网页上时触发JavaScript(播放声音)。
但是我被困住了:
- 我怎样才能使JavaScript只触发一次,即使10个键在另一个键之后不久被按下(它应该只播放一次声音每个扫描的条形码,而不是每个数字)。
- 如何处理"无字段聚焦"问题?是否有一种方法可以从DOM获得这些信息?或者我必须检查页面上的每个字段是否有焦点?这将是不方便的,因为其他字段的数量(除了条形码输入字段)可以变化。
下面是一些代码,它将执行"即使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/如何使javascript只触发一次,即使在另一个
之后不久按了10个键
你不能那样做。
相反,在函数触发时将变量设置为true,并在X秒后使用setTimeout将其设置为false。在事件处理函数的顶部,测试该变量是否为真,如果为真,则立即返回。
我该如何解决"不关注领域"的问题?
测试事件。目标使用绑定到document
对象的事件处理程序。
或者,将keydown事件绑定到每个输入(并确保它调用event. stoppropagation)。将"no input focused"代码绑定到document
对象上的keydown
相关文章:
- 移动HTML输入文本框在提交时隐藏软键盘
- 将键盘输入保存到变量中
- 无法通过 JavaScript 在输入焦点上触发键盘
- 安卓键盘未打开绑定到触摸启动的输入标签
- 禁用输入文本字段中的键盘
- Chrome(Android)键盘将单词转移到js焦点更改的下一个输入
- 如何创建一个在JavaScript中执行与键盘输入相同事件的按钮
- 限制键盘输入
- 是否覆盖网站上文本输入区域的默认移动设备键盘?(HTML/JS/jQuery)
- 如何在Windows 7/8中通过单击文本输入来显示屏幕键盘
- 如何在Android网络视图中完全禁用所有输入的软键盘
- 在输入文本框的文本中间插入键盘字符值
- 输入焦点关闭键盘,需要长时间触摸
- 触发数字键盘输入文本所有移动设备
- 如何在不隐藏键盘的情况下清除输入搜索?(手机)
- 在html输入元素的焦点上触发数字键盘
- 每当我按下输入框内的键盘输入按钮(其中有文本)时,都会出现新的段落
- 禁用输入键盘3秒后,第一次按下并重新启用输入键盘再次
- 处理只输入键盘按钮点击使用jquery
- contentteditable + selectAll: Firefox不允许在动态生成的内容上输入键盘