【发布时间】:2017-05-25 05:45:11
【问题描述】:
所以我正在使用 jquery 进行自动完成搜索。我必须在执行 ajax 函数之前设置一个延迟,因为我不想每次在文本框上键入时都用调用来敲击我的服务器。这是我的代码:
function searchVendor() {
setTimeout(searchVendor2, 5000);
}
function searchVendor2() {
var search = $('#inputVendor').val();
$.ajax({
type: 'POST',
url: '/getVendors',
data: {search: search},
dataType: 'json',
success: function(s) {
$('#inputVendor').autocomplete({source: s});
}
});
}
所以函数searchVendor被执行onkeyup
<input type="text" class="form-control input-sm" id="inputVendor" onkeyup="searchVendor()">
如果我输入 3 个字符(例如 sas),那么函数 searchVendor2 会执行 3 次。 5 秒的延迟有效,但它并没有停止并覆盖之前的 setTimeout。
我想要发生的是,如果我在文本框中键入一个字符,它将在 5 秒后执行,但是!如果在 5 秒之前输入了一个新字符,setTimeout 将再次重置为 5 秒。只要用户在文本框上输入,setTimeout 就会重置为 5 秒,并且只有在 5 秒后用户没有再次输入时才会执行。
感谢那些可以提供帮助的人!
【问题讨论】:
-
您可以提供
minLength选项,以便仅在用户输入最少字符后进行搜索。例如:minLength: 3 -
我不确定我能不能这么说,但这不会破坏自动完成的目的吗?我认为最好使用自动完成这样的最小长度提供的功能。
标签: javascript jquery settimeout