demo
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>scan demo</title>
</head>
<body>
<input type="text" id="sn">
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
<script>
var qrResult = "";
$(document).keydown(function(event){
if( event.key==="Enter" ){
let readResult = qrResult; // qrResult 扫码枪自动装载内容
qrResult = "";
if(readResult!==undefined || readResult!==""){
// 业务流程
alert(readResult)
$('#sn').val(readResult) //设置值
}
}else {
qrResult = qrResult + event.key;
}
});
</script>
</body>
</html>
当在当前页面加载完成后,如果用户并未在此页面有任何操作,由于当前焦点并不在此窗口,所以此时扫码枪的输入信号并不会被监听,业务流程也无法被正常执行。
解决办法为:增加必要的提示和页面交互操作,比如在本页面做出提示,要求用户在本页面至少进行一次点击或其他交互后方能使用扫码枪。
本文实现的处理流程并不是直接录入型的,当用户在页面有一个文本输入控件(如:input、textaera等)时,如果当前输入法处于中文输入模式时,扫码枪的回传信息将等同于键盘逐字点击操作。
举个例子:
识别结果为:id=1,当输入法为中文时,最终通过扫码枪输入到输入控件的结果很可能是如 “i的” 的输入法软件处理后的结果。下图展示了我本地的模拟结果。
解决办法为:根据实际情况在开发中指定输入控件的输入类型和输入范围。
参考:在网页项目中集成扫码枪设备,实现二维码扫码识别实战_扫码枪对接web-CSDN博客
http://blog.xqlee.com/article/250106141956131.html