【发布时间】:2018-12-01 18:01:41
【问题描述】:
我浏览了答案,发现了两种有助于区分扫描仪和键盘输入的方法。可以通过:
基于时间:扫描仪输入比手动键盘输入更快。
基于前缀: 将前缀附加到条形码或扫描仪(内置在扫描仪设备中)并使用它来识别扫描仪输入。
以下是链接:link 1、link 2,我已将它们用于参考。
我遇到的问题是,每当用户在触发扫描事件时手动键入一些键盘键时,它就会被添加到扫描仪输入中并导致结果不一致。
这是我正在使用的代码:
var BarcodeScannerEvents = function(){
this.initialize.apply(this, arguments);
};
BarcodeScannerEvents.prototype = {
initialize: function() {
$(document).on({
keypress: $.proxy(this._keypress, this)
});
},
_timeoutHandler: 0,
_inputString: '',
_keypress: function (e){
if(this._timeoutHandler){
clearTimeout(this._timeoutHandler);
}
this._inputString += String.fromCharCode(e.which);
//CHECKS FOR VALID CHARACTERS WHILE SCANNING
this._timeoutHandler = setTimeout($.proxy(function(){
if(this._inputString.length <= 10){
this._inputString = '';
return;
}
$(document).trigger('barcodescanned', this._inputString);
this._inputString = '';
}, this), 20);
}
};
new BarcodeScannerEvents();
我的条形码格式是:~xxx-xxx-xxxxxx 其中 x 可以是 0-9 之间的任何数字。如果将数字字符附加到条形码中,则会导致在数据库中插入错误。
我尝试比较键盘输入和扫描仪输入的事件,但无济于事。我已经考虑在每个数字之前附加额外的字符,然后如果出现连续数字,则使扫描的条形码无效。但我不认为这是解决这个问题的最佳方法。有人可以帮我吗?
【问题讨论】:
-
“它被添加到扫描仪输入” 让我相信您要解决的问题是对数据进行排队,而不是区分输入。我看到你已经设置了超时,但也许需要更正式的去抖动功能? davidwalsh.name/javascript-debounce-function
-
@jmargolisvt 抱歉延迟回复。我确实想区分扫描仪和键盘输入。这是因为当扫描仪读取条码时,由于键盘输入而发生一些按键事件,它会干扰条码并导致扫描错误。
标签: javascript jquery barcode-scanner