首页/ 填坑/ 文章详情

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

big2catbig2cat 08-27 16:11
然而没什么用,smartpss不兼容老录像机,就算能看回放,很多时间点在回放里也看不到
HentaiCatHentaiCat 2020-12-30 10:22
考科目二全程很紧张,考了三次才过,有次侧方入库直接pass,100分扣完,呜呜呜~
猫猫酱猫猫酱 2020-11-12 10:56
一入多肉深似海,说多都是泪
soulkunsoulkun 2020-11-05 15:54
IconFont的图标真的很好用!!!
无限链霉球菌无限链霉球菌 2020-11-03 11:41
药店,了解一下(`・ω・´)