Javascript jqueryajax仅在某些键上执行

Javascript jqueryajax仅在某些键上执行,javascript,jquery,ajax,Javascript,Jquery,Ajax,我制作了一个脚本,每当发生键控时,它都会将信息从输入发送到脚本。问题是,每当按下任何键时,它都会发送一个请求(显然)。这意味着某些请求(例如,当按下箭头键时)是免费完成的。有没有一种方法可以删除这些请求,或者它们是否发生并不重要 $('input[name="rusername"]').on("focus keyup", function() { // if ($(this).val() === '') $('#rusererr').html('Enter your desired u

我制作了一个脚本,每当发生键控时,它都会将信息从输入发送到脚本。问题是,每当按下任何键时,它都会发送一个请求(显然)。这意味着某些请求(例如,当按下箭头键时)是免费完成的。有没有一种方法可以删除这些请求,或者它们是否发生并不重要

$('input[name="rusername"]').on("focus keyup", function() {

    // if ($(this).val() === '') $('#rusererr').html('Enter your desired username; between 8 and 32 characters');

    var username = $(this).val();

    $.post("register.php", {
        rusername: username
    }, function(stuff) {
        //daca nu sunt erori
        if (stuff==='1') alert(stuff);
        else alert(stuff);
    });
});
检查钥匙代码:

$('input[name="rusername"]').on("focus keyup", function(e) {
    var keyCode = e.which;
    if (keyCode != 13) {
        //AJAX
    } else {
        return;
    }
});

我以
13
为例,您必须查找要排除的键码。

检查键码中的一些键

  • 输入:13
  • 上升:38
  • 下降:40
  • 右:39
  • 左:37
  • Esc:27
  • 空格键:32
  • Ctrl:17
  • 备选:18
  • 班次:16
    • 你可以这样做

      var exclude = [37, 38, 39, 40] // arrow keys, you can add more. 
      $('input[name="rusername"]').on("focus keyup", function(e) {
          var keyCode = e.which || e.keyCode;
          if (exclude.indexOf(keyCode) == -1) {
              // do ajax here
          } else { return; }
      });
      

      为什么要在每个关键操作上发送ajax请求

      仅在输入的blur事件上发送ajax请求可以大大减少ajax调用的数量,并且不需要处理keycodes(keycodes是一个非常困难的主题!)。如果您必须这样做,请将结果保存在
      localStorage
      中,如果您执行了一些无意义的保存操作,则无所谓

      $(“#输入”)。关于(“模糊”,函数(){
      $(“#result”).html(“现在将触发Ajax调用!”);
      });
      $(“#输入”)。在(“键控”,函数()上{
      $(“#result”).html(“以下字符串将在本地保存:“+this.value”);
      });
      
      
      


      只需将
      post
      调用包含在过滤所需键码的条件中,或者更好,在输入字段失去焦点后执行调用(这很可能是一个好迹象,表明用户实现了他们所需的结果)。与(这是针对
      keypress
      而不是
      keyup
      ,不过,我不确定它们的规范化行为是否100%相同)出于性能原因,您绝对不应该在keyup事件上发送和ajax请求-而是使用更通用的事件。哪一个?我可以使用blur,但如果我要匹配两个密码字段,则在用户离开第二个字段之前它们不会匹配。我明白了。我想可能有一些功能会自动排除它。不…
      keyup
      正是这样做的,在任何一个keyup:D上触发。您始终可以创建一个坏keycodes数组,并根据该数组检查当前keycode的索引。