php 监听条码枪输入,使用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:

$("#barCode").startListen({

barcodeLen : 10,

letter : true,

number : true,

show : function(code){

layer.msg(code);

}

});

运行效果图:

L3Byb3h5L2h0dHAvN3h2cWFyLmNvbTEuejAuZ2xiLmNsb3VkZG4uY29tL1dYMjAxNzAzMjEtMTUxMDEyQDJ4LnBuZw==.jpg

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

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

代码很简单,可以直接阅读,有值得改进的地方欢迎指出。

jquery 监听所有锚点链接实现平滑移动

jquery 监听所有锚点链接实现平滑移动,地址栏上不会改变链接地址 //监听所有锚点链接实现平滑移动 $('a[href*=#],area[href*=#]').click(function() { ...

Android EditText的输入监听,输入字符的动态获取

http://itindex.net/detail/38974-android-edittext-%E7%9B%91%E5%90%AC 有时候我们可能会用到时时的监听EditText输入字符的时时监听 ...

jQuery监听事件经典例子

关键字:jQuery监听事件经典例子  js代码:  ============================================================  $(function( ...

实时监听input输入内容的N种方法

现在有一个需求,需要我们实时监听input输入框中的内容,从而带来更好的用户体验,而不是等我们全部输入完毕才告诉我们格式不对首先我们创建一个input输入框

一千行ABAP代码实现Windows传统游戏扫雷

*&---------------------------------------------------------------------* *& Report ZCHENH087 ...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在使用 WinForm 监听 USB 扫码输入时,可以采用以下步骤: 首先,我们需要使用 C# 代码编写 WinForm 窗体应用程序。在设计窗体时,我们可以添加一个文本框用于显示扫码输入的内容。同时,我们还需要添加一个事件监听器来监听 USB 扫码输入。 在代码中,我们可以使用 `System.IO.Ports` 命名空间中的 `SerialPort` 类来监听 USB 扫码输入。我们先实例化一个 `SerialPort` 对象,并设置相关的属性,如扫码的串口号、波特率、奇偶校验等。然后,我们可以通过绑定 `DataReceived` 事件来获取输入数据。 在 `DataReceived` 事件处理程序中,我们可以将扫码输入数据读取到一个字符串变量中,并通过委托将其显示在窗体的文本框内。 在窗体的加载事件中,我们需要打开串口连接以接收扫码输入。在窗体关闭事件中,我们应该关闭串口连接。 最后,我们可以运行该应用程序并连接 USB 扫码。当扫码输入时,应用程序将能够监听到数据并显示在窗体的文本框中。 需要注意的是,不同的扫码可能有不同的通信协议和设置,因此在监听和解析扫码输入数据时,可能需要进行一些额外的处理和适配。 通过以上步骤,我们可以实现在 WinForm 中监听 USB 扫码输入并对其进行处理。 ### 回答2: 要在WinForm应用中实现监听USB扫码输入,需要使用C#语言和相关的API。首先,需要在WinForm界面中添加一个文本框控件来显示扫码输入的数据。 然后,需要使用`System.Management`命名空间下的`ManagementEvents`类来监听USB设备的插拔事件。可以编写一个方法来订阅USB设备的插拔事件,并在事件处理程序中判断扫码是否插入或拔出。如果扫码插入,就需要继续进行后续操作。 接下来,需要使用`System.IO.Ports`命名空间下的`SerialPort`类来监听串口数据的输入。由于大多数USB扫码模拟为串口设备,可以通过设置串口名称、波特率等参数来与扫码进行通信,并在数据接收事件中获取到扫码输入的数据。 在WinForm中,可以通过订阅`SerialPort`类的`DataReceived`事件来监听串口数据的输入。在事件处理程序中可以将获取到的数据写入到之前添加的文本框控件中,以实现实时显示扫码输入的数据。 在应用程序退出时或扫码拔出时,需要及时释放相关资源,关闭串口连接等。可以通过在`FormClosing`事件中进行相关操作来确保资源的释放。 综上所述,以上是实现WinForm监听USB扫码输入的一般步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值