当前位置: 首页 > Web前端 > HTML

使用jQuery监控扫码器输入,禁止手动输入

时间:2023-04-02 19:34:39 HTML

的实现方法是基于jQuery对扫码器的监控。如果只是想监控获取条码扫描信息,可以直接使用。如果条码判断处理逻辑比较多,需要自己扩展。1.功能需求使用条码扫描器扫描条码,在网页上监控和获取条码扫描器的数据,禁止用户进行手动输入操作。一开始的想法很简单,因为扫码器就是模拟键盘的输入。用usb接口插到电脑上就变成了一个外接输入设备,可以用js监控。但是如何判断用户是否手动输入需要一些处理。二、主要问题1、如何判断是否手动输入2、如何判断一个条码输入完成3、解决方法手动输入的解决方法是:比较按下一个键和抬起的时间间隔,以及时间两次按键之间的间隔。因为扫码器的输入速度很快,我测试的扫码器的输入间隔大概在15-60毫秒,然后手动输入在100-200之间,除非你刻意想突破限制为了快输入。这个区间值可以控制的很小,只要不超过扫描二维码的速度??即可。输入完成判断:可以监听输入框的变化,如果达到我们想要的位数,就会提交给服务器处理;二是基于扫码枪,因为我用的扫码枪是可以配置的,扫码成功最后加回车。因此根据回车的keycode可以判断输入已经结束,然后获取输入框的值,再进行后续的处理(提交给服务器等)。4、代码时间间隔的判断依赖于jQuery的三个事件:keydown、keypress、keyup;即按键开始按下,已经按下,弹出这三种状态。keydown表示刚刚按下了键,但是键值还没有写入文本框,已经按下keypress并且已经在文本框中输入了值,弹出keyup。需要判断的是从按键到抬起的时间间隔,以及两次按键之间的时间间隔。主要手动输入判断码。varbarcode={listenerObj:null,oneKeyTime:'',/*一次按键的时间间隔*/twoKeyTime:'',/*两次按键的时间间隔*/keyDownTime:'',/*按键时间*/barcodeLen:8,/*条码长度*/spanTime:70,/*从按键到松开的时间间隔*/on_key_down:function(){varthat=this;this.listenerObj.keydown(function(e){if(e.which!==13&&!(that.in_range(e.which))){$(that.listenerObj).val('');return;}vard=newDate();varcurTime=parseInt(d.getTime());if(that.keyDownTime!==''&&that.keyDownTime!==NaN){that.twoKeyTime=curTime-that.keyDownTime;}that.keyDownTime=curTime;});},on_key_up:function(){varthat=this;this.listenerObj.keyup(function(e){vard=newDate();varkeyUpTime=d.getTime();that.oneKeyTime=parseInt(keyUpTime)-parseInt(that.keyDownTime);varisHand=that.checkHandInput();if(isHand&&that.in_range(e.which)){layer.msg('禁止手动输入');$(that.listenerObj).val("");}})},on_key_press:function(){varthat=this;this.listenerObj.keypress(function(e){if(e.which==13&&that.check_barcode()){that.createListEl();}});},checkHandInput:function(){if((this.oneKeyTime>this.spanTime)||this.twoKeyTime>this.spanTime){返回真;}else{返回错误;}},}整理代码放到Github上我的js代码中的提示使用了layer.js,所以如果你使用index.html中的例子,导入相关的js:$("#barCode").startListen({barcodeLen:10,letter:true,number:true,show:function(code){layer.msg(code);}});这里可配置的参数:包括条码的长度,是否包含英文字母,是否包含数字。以及一个show回调方法,当扫码成功且条码合法时会调用该方法,返回条码的值进行自定义操作,比如上传到服务器。代码中,页面的输入框有一个stayfocus,所以无法实现页面的其他输入需求,可以去掉keepFocusInput的调用。代码非常简单,可以直接阅读。如果有值得改进的地方,请指出。推荐一款适合二次开发的扫描枪:MS3398迷你条码扫描枪