等待功能直到用户停止输入

You*_*uss 9 jquery events delay settimeout

我有用户在打字时进行ajax调用.问题是它会对每个字母进行调用,所以我设置了这样的超时:

$(input).live('keyup', function(e){

setTimeout(function(){ 

var xx = $(input).val();
doSearch(xx); 

}, 400); 

}); 
Run Code Online (Sandbox Code Playgroud)

它确实等待400ms,然后为每个keyup执行.如何更改此选项,以便在最后输入的字母后约400ms内"acax"调用一次?

(我过去使用'延迟',但这对我的脚本根本不起作用......)

Gav*_*iel 19

timer = 0;
function mySearch (){ 
    var xx = $(input).val();
    doSearch(xx); 
}
$(input).live('keyup', function(e){
    if (timer) {
        clearTimeout(timer);
    }
    timer = setTimeout(mySearch, 400); 
});
Run Code Online (Sandbox Code Playgroud)

最好将你的函数移动到一个命名函数并多次调用它,因为否则你会在每个keyup上创建另一个lambda函数,这是不必要的并且相对昂贵