思路:监听页面上所有的keypress事件,根据扫码枪录入的速度跟正常人为输入的速度,也就是时间间隔对比。来判断是不是扫码枪录入。问题是判断第一个输入的值是人还是扫码枪。所以在下面处理中,不管人输入还是扫码枪,都会记录第一个值。通过判断第二个输入值是不扫码枪即可。是,就拼接code字符串,不是则清零并将当前值作为第一个输入值。
var code = "";
var lastTime,nextTime;
var lastCode,nextCode;
document.onkeypress = function(e) {
nextCode = e.which;
if(e.which === 13){
if(code.length < 2){ //手动输入的时间不会让code的长度大于2,所以这里只会对扫码枪有效
return
}
lastTime = null;
lastCode = null;
code = '';
return;
}
nextTime = new Date().getTime();
if(!lastTime && !lastCode){
code += e.key;
}
if(lastCode != null && lastTime != null && nextTime - lastTime <= 30) {
code += e.key;
}else if(lastCode != null && lastTime != null && nextTime - lastTime > 500) {//当扫码前有keypress事件时,防止首字缺失
code = e.key;
}
lastCode = nextCode;
lastTime = nextTime;
};