Javascript 未捕获触发的按键事件?
我正在从条形码扫描仪(类似于键盘输入)捕获输入,它工作得很好,但我目前无法访问条形码扫描仪,需要测试我的代码,因此我需要模拟条形码扫描仪(键盘)输入 我以为为每个角色触发Javascript 未捕获触发的按键事件?,javascript,jquery,keypress,Javascript,Jquery,Keypress,我正在从条形码扫描仪(类似于键盘输入)捕获输入,它工作得很好,但我目前无法访问条形码扫描仪,需要测试我的代码,因此我需要模拟条形码扫描仪(键盘)输入 我以为为每个角色触发keypress事件会起作用,但事实并非如此。以下是我的测试代码: var barcodeScannerTimer; var barcodeString = ''; // capture barcode scanner input $('body').on('keypress', function (e) { barc
keypress
事件会起作用,但事实并非如此。以下是我的测试代码:
var barcodeScannerTimer;
var barcodeString = '';
// capture barcode scanner input
$('body').on('keypress', function (e) {
barcodeString = barcodeString + String.fromCharCode(e.charCode);
clearTimeout(barcodeScannerTimer);
barcodeScannerTimer = setTimeout(function () {
processBarcode();
}, 300);
});
function processBarcode() {
console.log('inside processBarcode with barcodeString "' + barcodeString + '"');
if (!isNaN(barcodeString) && barcodeString != '') { // @todo this check is lame. improve.
alert('ready to process barcode: ' + barcodeString);
} else {
alert('barcode is invalid: ' + barcodeString);
}
barcodeString = ''; // reset
}
window.simulateBarcodeScan = function() {
// simulate a barcode being scanned
var barcode = '9781623411435';
for (var i = 0; i < barcode.length; i++) {
var e = jQuery.Event("keypress");
e.which = barcode[i].charCodeAt(0);
$("body").focus().trigger(e);
}
}
var条码扫描定时器;
var barcodeString='';
//捕获条形码扫描仪输入
$('body')。在('keypress',函数(e)上{
barcodeString=barcodeString+String.fromCharCode(e.charCode);
clearTimeout(条形码扫描计时器);
barcodeScannerTimer=setTimeout(函数(){
processBarcode();
}, 300);
});
函数processBarcode(){
log('带有barcodeString“'+barcodeString+”'的内部processBarcode);
如果(!isNaN(barcodeString)&&barcodeString!=''{/@todo此检查无效。请改进。
警报(“准备处理条形码:”+条形码字符串);
}否则{
警报('条形码无效:'+条形码字符串);
}
条形码字符串=“”;//重置
}
window.simulateBarcodeScan=函数(){
//模拟正在扫描的条形码
var条形码='9781623411435';
对于(变量i=0;i
如果您快速键入一个数字(如1234
),您将看到输入被很好地捕获。但是,单击按钮运行我的测试代码,并且不会捕获输入。触发该事件的原因是弹出一个警报框,但barcodeString
为空
为什么这不起作用?我是否应该触发除按键以外的其他事件?处理程序正在读取
charCode
,但您只是在事件上设置哪个。设置charCode
,或从中读取
发射合成事件
这提醒您,触发合成事件是一项棘手的工作,通常需要您熟悉处理程序(这是不好的),这样您就不必构造完整的事件对象。另外,请注意,并非所有由jQuery触发的事件都会触发本机事件并导致应用其默认操作
简单地说,触发keypress
实际上不会在文本字段中键入字符,也不会触发未使用jQuery
设置的事件处理程序
document.querySelector('input')。addEventListener('keypress',function(){
log(“标准输入按键处理程序”);
});
var e=jQuery.Event(“keypress”);
e、 which=“a”。charCodeAt(0);
$('input')。按键(函数(){
log('jQuery输入按键处理程序');
}).触发器(“按键”,e)代码>
当海报提供像您这样的质量问题时,找到解决方案的速度会快得多。
barcodeString = barcodeString + String.fromCharCode(e.which);