我有一个jQuery Ajax请求,我想用文本输入调用,所以我将它嵌套在keyup(function()
中。这很好。
$("#text_box").keyup(function() {
//AJAX REQUEST
});
但这有时候会出现问题。当我输入一些文本非常快时,我得到输入字的结果,原始输入字的一些最后字母被省略(可能是浏览器的一些错误)。我希望在没有输入活动一秒钟时发送ajax请求,我的意思是,如果我输入文本非常快并且休息一秒钟(意味着我做了输入)。我怎么能这样做?
答案 0 :(得分:6)
听起来好像是从之前的ajax调用中获得结果。使用带setTimeout
和clearTimeout
的计时器。
var timer = null;
$("#text_box").keyup(function() {
if(timer) {
clearTimeout(timer);
}
timer = setTimeout(someFunction, someDelay);
});
其中someFunction
是一个执行ajax调用的函数,而someDelay
是您在执行调用之前要等待的延迟,在用户键入之后,以ms为单位。
答案 1 :(得分: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!
答案 2 :(得分: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()">