Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未捕获触发的按键事件?_Javascript_Jquery_Keypress - Fatal编程技术网

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);