Jquery ajax仅对某些键执行

时间:2014-10-09 13:16:57

标签: javascript jquery ajax

我创建了一个脚本,只要发生密钥,就会将输入信息从脚本发送到脚本。问题是,只要按下任何键,它就会发送请求(显然)。这意味着当按下例如箭头键时,某些请求无效。有没有办法删除这些请求,或者它们是否发生无关紧要?

$('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);
    });
});

4 个答案:

答案 0 :(得分:1)

检查密钥代码:

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

我使用13作为示例,您必须查找要排除的密钥代码。

答案 1 :(得分:0)

检查密钥的某些密钥。

  • 输入:13
  • Up:38
  • Down:40
  • 右:39
  • 左:37
  • Esc:27
  • SpaceBar:32
  • Ctrl:17
  • Alt:18
  • Shift:16

答案 2 :(得分:0)

你可以这样做

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; }
});

答案 3 :(得分:0)

为什么要对每个关键操作发送ajax请求?

仅在输入的blur事件上发送ajax请求大大减少了AJAX调用的次数,并且不需要乱用密钥代码(密钥代码是一个非常棘手的主题!)。如果您必须这样做,请将结果保存在localStorage之间,如果您进行一些无意义的保存操作则无关紧要。



$("#input").on("blur",function(){
  $("#result").html("An Ajax call would be triggered now!");
});

$("#input").on("keyup",function(){
  $("#result").html("The following string will be save locally: "+this.value);
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="input" type="text">
<br><br>
<div id="result">
  
  </div>
&#13;
&#13;
&#13;