使用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 相关文章推荐
jQuery插件FusionCharts绘制的3D双柱状图效果示例【附demo源码】
Apr 20 jQuery
关于jQuery中fade(),show()起始位置的一点小发现
Apr 25 jQuery
JQuery Ajax 异步操作之动态添加节点功能
May 24 jQuery
jQuery事件_动力节点Java学院整理
Jul 05 jQuery
jquery版轮播图效果和extend扩展
Jul 18 jQuery
jQuery选择器之子元素选择器详解
Sep 18 jQuery
简单实现jquery隔行变色
Nov 09 jQuery
jQuery基于Ajax实现读取XML数据功能示例
May 31 jQuery
jQuery实现的简单手风琴效果示例
Aug 29 jQuery
jquery.tagsinput.js实现记录checkbox勾选的顺序
Sep 21 jQuery
jQuery操作元素追加内容示例
Jan 10 jQuery
JQuery表单元素取值赋值方法总结
May 12 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数据库链接类(PDO+Access)实例分享
2013/12/05 PHP
教你识别简单的免查杀PHP后门
2015/09/13 PHP
调用WordPress函数统计文章访问量及PHP原生计数器的实现
2016/03/21 PHP
PHP使用星号隐藏用户名,手机和邮箱的实现方法
2016/09/22 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
PHP实现的支付宝支付功能示例
2019/03/26 PHP
js 格式化时间日期函数小结
2010/03/20 Javascript
jQuery中绑定事件的命名空间详解
2011/04/05 Javascript
jQuery 在光标定位的地方插入文字的插件
2012/05/10 Javascript
JS画5角星方法介绍
2013/09/17 Javascript
JavaScript获取XML数据附示例截图
2014/03/05 Javascript
jQuery之DOM对象和jQuery对象的转换与区别分析
2015/01/08 Javascript
jQuery焦点图插件SaySlide
2015/12/21 Javascript
javascript的replace方法结合正则使用实例总结
2016/06/16 Javascript
值得分享的bootstrap table实例
2016/09/22 Javascript
AngularJs验证重复密码的方法(两种)
2016/11/25 Javascript
Vee-Validate的使用方法详解
2017/09/22 Javascript
bootstrap+jquery项目引入文件报错的解决方法
2018/01/22 jQuery
30分钟快速入门掌握ES6/ES2015的核心内容(上)
2018/04/18 Javascript
vue生命周期与钩子函数简单示例
2019/03/13 Javascript
基于Node.js的大文件分片上传示例
2019/06/19 Javascript
Vue实现商品详情页的评价列表功能
2019/09/04 Javascript
浅谈Python peewee 使用经验
2017/10/20 Python
Python简单实现两个任意字符串乘积的方法示例
2018/04/12 Python
凯特·丝蓓英国官网:Kate Spade英国
2016/11/07 全球购物
ET Mall东森购物网:东森严选
2017/03/06 全球购物
机电专业体育教师求职信
2013/09/21 职场文书
行政办公员自我评价分享
2013/12/14 职场文书
工程建设实施方案
2014/03/14 职场文书
开工仪式策划方案
2014/05/23 职场文书
优秀团干部个人事迹
2014/05/29 职场文书
金融系毕业生自荐书
2014/07/08 职场文书
代领学位证书毕业证书委托书
2014/09/30 职场文书
酒桌上的祝酒词
2015/08/12 职场文书
SqlServer: 如何更改表的文件组?(进而改变存储位置)
2021/04/05 SQL Server
sql通过日期判断年龄函数的示例代码
2021/07/16 SQL Server