Php 已使用条形码扫描仪功能键控执行两次

Php 已使用条形码扫描仪功能键控执行两次,php,jquery,ajax,laravel,Php,Jquery,Ajax,Laravel,我已经在每个学生的ID中分配了一个条形码。我用条形码扫描仪扫描他们的身份证,检查他们的出勤情况。我使用的是keyup函数,但每次我扫描他们ID中的条形码时,keyup函数都会执行两次 <script type="text/javascript"> function loaddelegates($barcode) { var xhttp = new XMLHttpRequest(); xhttp.on

我已经在每个学生的ID中分配了一个条形码。我用条形码扫描仪扫描他们的身份证,检查他们的出勤情况。我使用的是keyup函数,但每次我扫描他们ID中的条形码时,keyup函数都会执行两次

 <script type="text/javascript">


       function loaddelegates($barcode)
         {
            var xhttp = new XMLHttpRequest();
            xhttp.onreadystatechange = function() {
              if (this.readyState == 4 && this.status == 200) {
               document.getElementById("getdel").innerHTML = this.responseText;
               $("#barcode").focus();
              }
            };
            xhttp.open("GET", "mealclient/" + $barcode, true);
            xhttp.send();

          }

$(function() {
           $('#barcode').attr('maxlength','13');
        $(document).on('keyup','#barcode',function(e) {
           e.preventDefault();
            if ($(this).val().length >= 13) {
                loaddelegates($(this).val());
                return false;
            }
        });
      });

函数loaddelegates($barcode)
{
var xhttp=newXMLHttpRequest();
xhttp.onreadystatechange=函数(){
if(this.readyState==4&&this.status==200){
document.getElementById(“getdel”).innerHTML=this.responseText;
$(“#条形码”).focus();
}
};
xhttp.open(“GET”、“mealclient/”+$barcode,true);
xhttp.send();
}
$(函数(){
$(“#条形码”).attr('maxlength','13');
$(文档).on('keyup','#barcode',函数(e){
e、 预防默认值();
如果($(this).val().length>=13){
loaddelegates($(this.val());
返回false;
}
});
});


简洁的
    @foreach($餐费作为$餐费)
  • @endforeach
@foreach($餐费作为$餐费) {{strtoupper($mean->mean)} @endforeach 条形码 名称 组织机构 位置 学校
我可以想象条形码阅读器在某种程度上模拟按键,就像你在听键盘一样。可能它模拟了两个键,例如,
Ctrl+V
将调用您的函数两次

要调试此问题,我建议添加

var code = e.keyCode || e.which;
console.log(code);
在你的键盘监听程序的最顶端。检查控制台输出。因此,如果读者真的同时模拟了两个键,你当然可以忽略其中一个

编辑:正如OP所写,控制台中除了另一个键代码之外还显示13。 13是CR(回车)的ASCII码

因此,要忽略此键,请执行以下操作:

$(document).on('keyup','#barcode',function(e) {
      e.preventDefault();
      var code = e.keyCode || e.which;
      if (code != 13 && $(this).val().length >= 13) {
          loaddelegates($(this).val());
      }
});

它的钥匙是54。。钥匙代码54是钥匙6。这是您扫描条形码的最后一个号码吗?只叫过一次?尝试使用几种不同的条形码,同时注意两个键可能是13,这是我之前已经想到的问题。这是ASCII字符CR(回车符),试着忽略这一个,就像如果(代码!=13)…我忽略那个键的代码是什么?对不起,我在开发websok时知道,我将用代码更新我的答案。所以当你扫描一个新的时,13总是显示出来?
$(document).on('keyup','#barcode',function(e) {
      e.preventDefault();
      var code = e.keyCode || e.which;
      if (code != 13 && $(this).val().length >= 13) {
          loaddelegates($(this).val());
      }
});