使用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中animate()的使用方法及解决$(”body“).animate({“scrollTop”:top})不被Firefox支持的问题
Apr 04 jQuery
jQuery实现文章图片弹出放大效果
Apr 06 jQuery
jQuery实现简单的抽奖游戏
May 05 jQuery
使用jQuery.Pin垂直滚动时固定导航
May 24 jQuery
jQuery正则验证注册页面经典实例
Jun 10 jQuery
jQuery实现全选、反选和不选功能
Aug 16 jQuery
jQuery+HTML5实现WebGL高性能烟花绽放动画效果【附demo源码下载】
Aug 18 jQuery
jQuery图片缩放插件smartZoom使用实例详解
Aug 25 jQuery
详解jQuery获取特殊属性的值以及设置内容
Nov 14 jQuery
简单易扩展可控性强的Jquery转盘抽奖程序
Mar 16 jQuery
jquery实现直播视频弹幕效果
Feb 25 jQuery
Jquery 获取相同NAME 或者id删除行操作
Aug 24 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正则提取图片地址
2014/03/27 PHP
thinkphp模板用法和内容输出实例
2014/11/28 PHP
PHP页面跳转实现延时跳转的方法
2016/12/10 PHP
Laravel学习教程之本地化模块
2017/08/18 PHP
Jquery常用技巧收集整理篇
2010/11/14 Javascript
左侧是表头的JS表格控件(自写,网上没有的)
2013/06/04 Javascript
浅析document.createDocumentFragment()与js效率
2013/07/08 Javascript
node.js中的fs.symlinkSync方法使用说明
2014/12/15 Javascript
浅谈javascript中replace()方法
2015/11/10 Javascript
JS判断当前页面是否在微信浏览器打开的方法
2015/12/08 Javascript
node.js基础知识小结
2018/02/26 Javascript
AngularJS监听ng-repeat渲染完成的方法
2018/03/20 Javascript
Nodejs调用Dll模块的方法
2018/09/17 NodeJs
微信小程序实现文字跑马灯
2020/05/26 Javascript
vue以组件或者插件的形式实现throttle或者debounce
2019/05/22 Javascript
VUE+node(express)实现前后端分离
2019/10/13 Javascript
Openlayers实现扩散的动态点(水纹效果)
2020/08/17 Javascript
基于JavaScript实现大文件上传后端代码实例
2020/08/18 Javascript
Python读取环境变量的方法和自定义类分享
2014/11/22 Python
Python3实现将文件归档到zip文件及从zip文件中读取数据的方法
2015/05/22 Python
将TensorFlow的模型网络导出为单个文件的方法
2018/04/23 Python
Python操作mongodb数据库进行模糊查询操作示例
2018/06/09 Python
python训练数据时打乱训练数据与标签的两种方法小结
2018/11/08 Python
python微信好友数据分析详解
2018/11/19 Python
opencv调整图像亮度对比度的示例代码
2019/09/27 Python
Python 找出英文单词列表(list)中最长单词链
2020/12/14 Python
CSS3 函数技巧 用css 实现js实现的事情(clac Counters Tooltip)
2017/08/15 HTML / CSS
英国户外服装品牌:Craghoppers
2019/04/25 全球购物
英语专业推荐信
2013/11/16 职场文书
青岛导游词
2015/02/12 职场文书
被告答辩状范文
2015/05/22 职场文书
Golang 编译成DLL文件的操作
2021/05/06 Golang
CSS基础详解
2021/10/16 HTML / CSS
JavaScript获取URL参数的方法分享
2022/04/07 Javascript
如何通过cmd 连接阿里云服务器
2022/04/18 Servers
详解Mysql数据库平滑扩容解决高并发和大数据量问题
2022/05/25 MySQL