首页/ 填坑/ 文章详情

Javascript 监听扫码枪那些事

扫码枪使用的的场景不多,常规出现在仓库的录入与录出操作。混迹前端多年,几次与扫码枪功能擦肩而过。直至上周,扫码枪该是你的还是你。

扫码枪是一个输入设备,功能性很专一。将扫码枪视作简易版的键盘,页面全局监听onkeydown事件,即可获得扫码的值。由于扫码枪的值是逐字逐字读取字符,将字符转义成了类似ASCII的值,可用String.fromCharCode重新转义成对应的字符。

JSdocument.onkeydown = function(e) {   
    let code = ''; 
    if(window.event) { // IE
        code = e.keyCode
    } else if(e.which) { // Netscape/Firefox/Opera
        code = e.which
    } else { //无法匹配该设置,请联系管理员
        console.log('无法匹配该设置,请联系管理员');
        return false;
    }

    if((code >= 48 && code <= 57)  || (code >= 96 && code <= 105)){
        //字母上方 数字键0-9 对应键码值 48-57
        //数字键盘 数字键0-9 对应键码值 96-105
        //数字键盘的键码值对应的字符有问题,所以手动调整键码值
        var codes = {'48':48,'49':49,'50':50,'51':51,'52':52,'53':53,'54':54,'55':55,'56':56,'57':57,
            '96':48,'97':49,'98':50,'99':51,'100':52,'101':53,'102':54,'103':55,'104':56,'105':57
        };

       let value = String.fromCharCode(codes[code]);
       console.log('转义的值为:',value); //code值为48,输出的值为:0
    } else if(code == 13 && code != "") {  //13 为按键Enter
       console.log('扫码结束');
    }
}

扫码枪单纯只扫英文加数字的组合是没问题,万万没想到遇上互联网企业:不我全要。按着ASCII对照表转义字符,扩充了code的判断范围,发现特殊字符直接被「过渡」了。在无法获取想要的值时,怎么为?恰好发现,只要事先对输入框来个获取焦点事件,扫码后,值原样赋值给输入框。

JS$('#input-scan').focus();

事前你有多努力查找与研究扫码枪的转义字符,现在统统成了无用功。项目完成后,你兴冲冲找测试,测试给你当头一棒:扫码枪不出结果。原来市面上扫码枪产家很多,标准不统一,有的扫码枪默认有回车符,有的需要手动设置回车符。

在自测时,发现扫码枪莫名其妙出现中文现象,只要将输入法切换回英文即可。

※  扫码枪的设置全在说明书上,说明书要好好保留。

文章评论0 records

最新 最早

0

最新评论Latest comments

凡心的仙人凡心的仙人 03-18 14:35
谢谢你了!
rantrismrantrism 2023-04-03 11:27
您好~我是腾讯云开发者社区运营,关注了您分享的技术文章,觉得内容很棒,我们诚挚邀请您加入腾讯云自媒体分享计划。完整福利和申请地址请见:https://cloud.tencent.com/developer/support-plan 作者申
唐牛才是食神唐牛才是食神 2022-06-15 10:51
(*°▽°*)八(*°▽°*)♪,解决了
唐牛才是食神唐牛才是食神 2022-06-15 10:49
发现不得了的东西,今晚回去好好研究下...
胖螺胖螺 2022-02-04 00:58
( ゜- ゜)つロ 在写了在写了。看到也有些感慨。因为站长前年在我原博客的留言,让我毅然选择去深造,选择读研,曾经我想过挺多东西的,还是自己本专业的适合我自己。在这先表达感谢。新年快乐!