2012-05-31 181 views
2

我有一个jQuery的Ajax请求,我想调用文本输入,所以我嵌入它内部keyup(function()。这工作正常。keyup(function())ajax请求延迟 - jQuery

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

但是,这有时会出现错误。当我输入一些文本的速度非常快时,我得到输入词的结果,并省略了原始输入词的某些最后一个字母(可能是浏览器出现故障)。我希望在没有任何输入活动的情况下发送ajax请求,我的意思是,如果我输入文本非常快并且休息一秒(意味着我输入了输入)。我怎样才能做到这一点?

+0

几乎相同的问题实际上已经被问已经_today_:http://stackoverflow.com/questions/10830972/user-idle-time-while-typing-in - 输入 – lanzz

+0

你可以看到这个http://stackoverflow.com/questions/1909441/jquery-keyup-delay – Zernel

回答

6

听起来好像你从以前的ajax调用得到结果。使用一个定时器setTimeoutclearTimeout

var timer = null; 

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

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

哪里someFunction是超出你的Ajax调用和someDelay是你想要做呼叫前等待,在用户输入后,以毫秒的延迟功能。

2

由于您已经在使用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! 
1

OMG

实施例。对于有人谁将会在2014年搜索...

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

<input onkeyup="function()"> 
+0

感谢您发布一个答案两年后,以保持线程uptodate ... – user3848987