使用HTML输入禁用键盘并允许扫描仪

Cai*_*der 6 html javascript jquery input barcode-scanner

我有一个HTML输入

<input type="text" id="txtInput">
Run Code Online (Sandbox Code Playgroud)

我需要禁用所有键盘输入键,只允许条形码扫描器获取条形码数据并用输入填充.

我试过"readonly"和"disabled"以及javaScript keydown,但所有这些解决方案都禁用了包括条形码扫描器在内的所有内容.

有没有办法做到这一点?

aro*_*oss 7

首先,您需要了解条形码扫描仪假装是键盘.因此,它们将像真正的键盘一样触发JS击键事件.我能想到分离2的唯一方法是基于时间的启发式(这个想法是没有人能在不到0.1秒的时间内输入整个10位数的条形码).

所以基本上,你会有一些javascript可以做这些事情:

  • (onkeydown)将按下的键附加到全局字符串并使用setTimeout启动计时器(具有非常低的延迟,比如说10毫秒)
  • (onkeydown)像以前一样追加按下的键,但不要再次启动计时器
  • 在你的setTimeout函数中,检查按键的字符串是否至少为 3个键(或更长,具体取决于你期望的条形码).如果是,请将字符串写入输入字段.否则,删除字符串
  • 冲洗并重复

这会很难看,但如果你真的很绝望,它可能会奏效

var delay = (function(){
   var timer = 0;
   return function(callback, ms){
      clearTimeout (timer);
      timer = setTimeout(callback, ms);
   };
})();

$("#txtInput").on("input", function() {
   delay(function(){
      if ($("#txtInput").val().length < 8) {
          $("#txtInput").val("");
      }
   }, 20 );
});
Run Code Online (Sandbox Code Playgroud)