在执行AJAX请求onkeyup之前等待1秒

时间:2014-05-15 13:22:44

标签: javascript jquery ajax

我有一个ajax请求,每次用户按某个文本区域中的某个按钮(写入文本)时都会执行该请求。这已经很好了(它是一个搜索过滤功能btw。),但在每次击键后执行过滤器不是一个好主意。所以我在考虑制作一个延迟的东西。所以ajax请求只有在用户按下最后一个按钮后至少经过1秒才会执行。我怎样才能做到这一点?

<textarea id="text" name="text" onkeyup="Search()"</textarea>

function Search()
{
    $.ajax({...
    ...
}

显然它会一直运行。例如,如果我输入&#34;你好&#34;快速进入textarea它将运行5次,没有用。只有当我停止写作超过1秒钟时才能运行它。

1 个答案:

答案 0 :(得分:8)

您可以使用setTimeout将操作延迟一定的毫秒数。如果有人快速键入,您还可以清除超时以防止请求排队。试试这个:

var timer;
function Search() {
    clearTimeout(timer) // clear the request from the previous event
    timer = setTimeout(function() {
        $.ajax({
           // ...
        });
    }, 200);
}

注意我延迟了200毫秒,这通常足以让某人键入多个键,但速度足够快,以至于UI的更新速度不会太慢。