2

我有一个 jQuery Ajax 请求,我想用文本输入调用它,所以我将它嵌套在keyup(function(). 这工作正常。

$("#text_box").keyup(function() {
 //AJAX REQUEST
});

但这有时会出现问题。当我非常快速地输入一些文本时,我得到的输入词的结果省略了原始输入词的一些最后一个字母(可能是浏览器的一些问题)。我希望在一秒钟内没有输入活动时发送 ajax 请求,我的意思是,如果我输入文本非常快并休息一秒钟(意味着我进行了输入)。我怎样才能做到这一点?

4

3 回答 3

7

听起来好像您从以前的 ajax 调用中获得了结果。使用带有setTimeout和的计时器clearTimeout

var timer = null;

$("#text_box").keyup(function() {
  if(timer) {
    clearTimeout(timer);
  }

  timer = setTimeout(someFunction, someDelay);
});

哪里someFunction是执行 ajax 调用的函数,并且someDelay是在用户键入之后,在执行调用之前要等待的延迟,以毫秒为单位。

于 2012-05-31T11:01:43.560 回答
3

由于您已经在使用 jQuery,您可以使用 Ben Aleman 的debounce插件。

页面示例

// Bind the not-at-all debounced handler to the keyup event.
  $('input.text').keyup( text_1 );

  // Bind the debounced handler to the keyup event.
  $('input.text').keyup( $.debounce( 250, text_2 ) ); // This is the line you want!
于 2012-05-31T11:04:14.427 回答
1

我的天啊。对于将在 2014 年进行搜索的人...

function sendAjax() {
    setTimeout(
        function() {
            $.ajax({
                url: "url.php",
                type: "POST",
                data: data,
                success: function(data) {
                    $("#result").html(data);
                }
            });
        }, 2000);
}

<input onkeyup="function()">
于 2014-07-16T07:16:23.447 回答