使用jQuery监听扫码枪输入并禁止手动输入的实现方法(推荐)


Posted in jQuery onMarch 21, 2017

基于jQuery的扫码枪监听。如果只是想实现监听获取条码扫码信息,可以直接拿来使用,如果有更多的条码判断处理逻辑需要自己扩展。

一、功能需求

使用扫码枪扫描条码,在一个web页面监听获取扫码枪的数据,并禁止用户进行手动的输入操作。

开始的想法非常简单,因为扫码枪就是模拟键盘的输入,当他用usb接口插入电脑的时候,就变成了一个外接的输入设备,用js监听就可以了。但是如何判断用户是否为手动输入就需要做一些处理了。

二、主要问题

1.如何判断是否手动输入

2.如何判断一个条码输入完成

三、解决方案

手动输入的解决办法就是:对比一个键从按下到抬起的时间间隔,以及两次按键的时间间隔。

因为扫码枪的输入速度非常的快,我测试的扫码枪输入的间隔大概在15-60毫秒,然后手动输入的100-200之间,除非刻意的想突破限制进行快速的输入。这个间隔值可以控制的很小,前提不要快过扫码抢的速度。

输入完成的判断:可以对输入框变化做一个监听,如果达到我们想要的位数,则提交服务器端进行处理;第二种是基于扫码枪,因为我使用的扫码枪可以配置扫码成功最后附加一个回车。所以根据回车的keycode就可以判断为输入已经结束,然后获取输入框的value,再进行后续的处理(提交服务器等)。

四、代码

时间间隔的判断,依赖于jQuery的三个事件:keydown,keypress,keyup;即键开始按下,已经按下,弹起这三个状态,keydown,就是在按键刚刚被按下,但键值还没有写入文本框,keypress已经按下并且值已经输入到文本框,keyup就是弹起了。

需要做判断的就是按键从按下到抬起的时间间隔,与两次keydown的时间间隔。

主要的手动输入判断代码。

var barcode = {
  listenerObj: null,
  oneKeyTime : '', /* 一次按键时间间隔 */
  twoKeyTime : '', /* 两次按键时间间隔 */
  keyDownTime: '', /* 键按下的时间  */
  barcodeLen : 8 , /* 条形码长度   */
  spanTime  : 70, /* 一次按键按下到释放的时间间隔 */
  on_key_down : function (){
    var that = this;
    this.listenerObj.keydown(function(e){
      if(e.which !== 13 && !(that.in_range(e.which))){
        $(that.listenerObj).val('');
        return ;
      }
      var d = new Date();
      var curTime = parseInt(d.getTime());
      if(that.keyDownTime !== '' && that.keyDownTime !== NaN){
        that.twoKeyTime = curTime - that.keyDownTime;
      }
      that.keyDownTime = curTime;
    });
  },
  on_key_up : function(){
    var that = this;
    this.listenerObj.keyup(function(e){
      var d = new Date();
      var keyUpTime = d.getTime();
      that.oneKeyTime = parseInt(keyUpTime) - parseInt(that.keyDownTime);
      var isHand = that.checkHandInput();
      if(isHand && that.in_range(e.which)){
        layer.msg('禁止手动输入');
        $(that.listenerObj).val("");
      }
    })
  },
  on_key_press : function(){
    var that = 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){
      return true;
    }else{
      return false;
    }
  },
}

将代码整理了一下,放到了Github。

我的js代码中的提示用到了layer.js,所以如果使用按照index.html中的示例,引入相关的js:

<input id="barCode" value="" type="text" placeholder="stay focus" style="" name="">
$("#barCode").startListen({
  barcodeLen : 10,
  letter : true,
  number : true,
  show : function(code){
    layer.msg(code);
  }
});

这里可配置的参数:包括条码的长度,是否包含英文字母,是否包含数字。以及一个show回调方法,这个方法会在扫码成功,条码合法的情况下被调用,返回条码的值,以便做自定义的操作,如上传服务器等。

代码中对页面的输入框做了stay focus,所以页面有其他的输入需求无法实现,可以除去keepFocusInput的调用。

以上所述是小编给大家介绍的使用jQuery监听扫码枪输入并禁止手动输入的实现方法(推荐),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

jQuery 相关文章推荐
JS与jQuery实现子窗口获取父窗口元素值的方法
Apr 17 jQuery
jQuery实现frame之间互通的方法
Jun 26 jQuery
使用vue与jquery实时监听用户输入状态的操作代码
Sep 19 jQuery
jQuery实现所有验证通过方可提交的表单验证
Nov 21 jQuery
jQuery代码优化方法总结
Jan 29 jQuery
关于jquery layui弹出层的使用方法
Apr 21 jQuery
jQuery实现获取动态添加的标签对象示例
Jun 28 jQuery
jQuery UI实现动画效果代码分享
Aug 19 jQuery
在vue项目中使用Jquery-contextmenu插件的步骤讲解
Jan 27 jQuery
jquery.pager.js实现分页效果
Jul 29 jQuery
jQuery实现雪花飘落效果
Aug 02 jQuery
jQuery实现回到顶部效果
Oct 19 jQuery
jquery插件制作 自增长输入框实现代码
Aug 17 #jQuery
jQuery插件HighCharts绘制2D饼图效果示例【附demo源码下载】
Mar 21 #jQuery
jQuery插件HighCharts绘制简单2D折线图效果示例【附demo源码】
Mar 21 #jQuery
jQuery插件HighCharts绘制简单2D柱状图效果示例【附demo源码】
Mar 21 #jQuery
jQuery+ThinkPHP+Ajax实现即时消息提醒功能实例代码
Mar 21 #jQuery
jQuery插件FusionCharts绘制ScrollColumn2D图效果示例【附demo源码下载】
Mar 22 #jQuery
jQuery轻松实现无缝轮播效果
Mar 22 #jQuery
You might like
用php代码限制国内IP访问我们网站
2015/09/26 PHP
thinkPHP中U方法加密传递参数功能示例
2018/05/29 PHP
PHP时间戳和日期相互转换操作实例小结
2018/12/18 PHP
Jquery 设置标题的自动翻转
2009/10/03 Javascript
jQuery与ExtJS之选择实例分析
2010/08/19 Javascript
jQuery的live()方法对hover事件的处理示例
2014/02/27 Javascript
JS完整获取IE浏览器信息包括类型、版本、语言等等
2014/05/22 Javascript
深入理解JavaScript系列(31):设计模式之代理模式详解
2015/03/03 Javascript
理解JavaScript事件对象
2016/01/25 Javascript
jQuery组件easyui基本布局实现代码
2016/08/25 Javascript
Angular2利用组件与指令实现图片轮播组件
2017/03/27 Javascript
AngularJS页面带参跳转及参数解析操作示例
2017/06/28 Javascript
基于vue通用表单解决方案的思考与分析
2019/03/16 Javascript
vue改变对象或数组时的刷新机制的方法总结
2019/04/24 Javascript
Python学习资料
2007/02/08 Python
Python bsddb模块操作Berkeley DB数据库介绍
2015/04/08 Python
python制作图片缩略图
2019/04/30 Python
python中for循环变量作用域及用法详解
2019/11/05 Python
用Python画小女孩放风筝的示例
2019/11/23 Python
基于jupyter代码无法在pycharm中运行的解决方法
2020/04/21 Python
浅谈Python中threading join和setDaemon用法及区别说明
2020/05/02 Python
优衣库台湾官网:UNIQLO台湾
2019/02/01 全球购物
COS美国官网:知名服装品牌
2019/04/08 全球购物
台湾屈臣氏网路商店:Watsons台湾
2020/12/29 全球购物
分布式数据库需要考虑哪些问题
2013/12/08 面试题
Prototype如何实现页面局部定时刷新
2013/08/06 面试题
大学毕业生个人自荐信范文
2014/01/08 职场文书
《要下雨了》教学反思
2014/02/17 职场文书
大学生职业生涯规划书汇总
2014/03/20 职场文书
《厄运打不垮的信念》教学反思
2014/04/13 职场文书
考试保密承诺书
2014/08/30 职场文书
合作经营协议书范本
2014/09/16 职场文书
党的群众路线教育实践活动组织生活会发言材料
2014/10/17 职场文书
留学推荐信中文范文
2015/03/26 职场文书
居住证明范文
2015/06/17 职场文书
Java中常用解析工具jackson及fastjson的使用
2021/06/28 Java/Android