使用jQuery监听扫码枪输入并禁止手动输入的实现方法-阿里云开发者社区

开发者社区> 技术小甜> 正文

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

简介:
+关注继续查看

基于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回调方法,这个方法会在扫码成功,条码合法的情况下被调用,返回条码的值,以便做自定义的操作,如上传服务器等。















本文转自xsster51CTO博客,原文链接:http://blog.51cto.com/12945177/1929769 ,如需转载请自行联系原作者











版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Android Native禁止使用系统私有库详解
解读Android Native对于系统私有库的限制,老版本的黑科技代码在N版本之后都可能导致APP崩溃。
1779 0
jquery插件制作 -- 4.自增长输入框
  本章我们将创建一个自增长的输入框插件,jquery.aotogrow.js。首先还是看html代码: DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.
740 0
Spring 4.2框架中注释驱动的事件监听器详解
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/49097919 Spring 4.2框架中注释驱动的事件监听器详解 作者:chszs,版权所有,未经同意,不得转载。
902 0
模拟使用Flume监听日志变化,并且把增量的日志文件写入到hdfs中
1.采集日志文件时一个很常见的现象 采集需求:比如业务系统使用log4j生成日志,日志内容不断增加,需要把追加到日志文件中的数据实时采集到hdfs中。 1.1.根据需求,首先定义一下3大要素: 采集源,即source—监控日志文件内容更新:exec ‘tail -F file’ 下沉目标,即sink—HDFS文件系统:hdfs sink Source和sink之
6715 0
ML之SSIM:基于输入图片RGB的三维向量利用SSIM(结构相似性度量)算法进行判别
ML之SSIM:基于输入图片RGB的三维向量利用SSIM(结构相似性度量)算法进行判别
23 0
+关注
10146
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载