我有一个页面需要同时执行两件事:
- 始终监听来自扫描仪的输入(表现为键盘输入),并注意何时以正确的格式输入字符串。
- 监听用户是否专注于特定下拉菜单,并输入一组缩写 - 当输入的一组缩写与下拉列表中某个项目的
title
属性相匹配时,将注意力集中在该下拉菜单上.
我可以单独做这两件事,但不能一起做。代码:
// Listen for input when userlist is in focus.
$("#userlist").keypress(function (e) {
initials += String.fromCharCode(e.which).toUpperCase();
$(this).find("option").filter(function () {
return $(this).attr("title").toUpperCase().indexOf(initials) === 0;
}).first().attr("selected", true);
// uses timer to check for time between keypresses
return false;
});
// Listen for scanner input all the time.
var input = '',
r1 = /^~{1}$/,
r2 = /^~{1}\d+$/,
r3 = /^~{1}\d+\.$/,
r4 = /^~{1}\d+\.\d+$/,
r5 = /^~{1}\d+\.\d+~{1}$/;
$(window).keypress(function(e) {
// when input matches final regex, do something
}
如果我两者都有,那么当用户专注于下拉列表时,页面不会“听到”来自扫描仪的输入。
如何将两者结合在一起,以确保页面对扫描仪输入使用react,即使用户专注于下拉列表也是如此?
最佳答案
这是因为您使用按键对象上的监听器覆盖了窗口对象上的监听器。我会做这样的事情:
var input = '',
r1 = /^~{1}$/,
r2 = /^~{1}\d+$/,
r3 = /^~{1}\d+\.$/,
r4 = /^~{1}\d+\.\d+$/,
r5 = /^~{1}\d+\.\d+~{1}$/;
function checkRegex(e) { /* Check */ }
// Listen for input when userlist is in focus.
$("#userlist").keypress(function (e) {
checkRegex(e);
initials += String.fromCharCode(e.which).toUpperCase();
$(this).find("option").filter(function () {
return $(this).attr("title").toUpperCase().indexOf(initials) === 0;
}).first().attr("selected", true);
// uses timer to check for time between keypresses
return false;
});
// Listen for scanner input all the time.
$(window).keypress(function(e) {
checkRegex(e);
}
关于javascript - jQuery:处理多个按键监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4783689/