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

egy*_*yar 6 javascript ajax jquery

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

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

function Search()
{
    $.ajax({...
    ...
}
Run Code Online (Sandbox Code Playgroud)

所以显然它会一直运行.例如,如果我在textarea中快速键入"hello",它将运行5次并且没有用处.只有当我停止写作超过1秒钟时才能运行它.

Ror*_*san 8

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

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

注意我延迟了200毫秒,这通常足以让某人键入几个键,但速度足够快,以至于UI不会显得太慢而无法更新.

  • @egyeneskanyar无需为初学者道歉 - 我们都从某个地方开始:) (2认同)