javascript - 减少 ajax 搜索功能的消耗,在用户输入时延迟 3 秒

标签 javascript jquery ajax

我当前的功能是监听事件 - propertychange 更改 keyup 输入粘贴 并发出 ajax 请求。然而,ajax 在每封信上发送请求,我相信这不是一种有效的方法?或者是吗?

所以,我的目标是让用户键入输入,并且仅在 3 秒后执行 ajax。使用 setTimeout 并不能完成这项工作。

$(document).on('propertychange change keyup input paste', '#IDaccountSearchQueryInput', function (event) {
    var query = $('#IDaccountSearchQueryInput').val();
    setTimeout(function () {
        console.log(query);
    }, 5000);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input type="text" id="IDaccountSearchQueryInput">

这段代码给了我:

h

哎呀
hell
你好
你好

因此,它在每次按键时执行,但我需要每 X 秒执行一次输入中的值,而不是每个字母。

最佳答案

您可以通过将 setTimeout id 存储在变量中,然后在开始输入时清除它来实现此目的。

var timer;
$(document).on('propertychange change keyup input paste', '#IDaccountSearchQueryInput', function() {
    if(timer) clearTimeout(timer);
    var query = this.value;
    if(!query.length) return false;
    timer = setTimeout(function() {
        $('#preview').text(query);
    }, 3000);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="IDaccountSearchQueryInput" />
<div id="preview"></div>

关于javascript - 减少 ajax 搜索功能的消耗,在用户输入时延迟 3 秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31965748/

相关文章:

javascript - 将一个 div 在另一个具有绝对位置状态的 div 内水平居中

javascript - 使用 PHP 和 Jquery Ajax 进行输入验证

javascript - ASP.NET MVC 和 WebAPI 使用数据库表插入和检索记录

可变范围的 JavaScript 循环问题

javascript - 将光标放在 iframe 内容的末尾

javascript - 如何在 JavaScript 非 html 文件中包含 d3?

javascript - 需要使固定宽度的数据表响应

javascript - 仅从字符串中删除位于末尾的图像元素

javascript - 使用 JSPdf 生成将整个 html 页面导出为 pdf

Backbone View 渲染函数中的 Ajax 请求