此功能有效(挂起呼叫),但搜索值未更新。如果输入“ hello”,则传递给函数($(this).val())的值为“ he”。有没有一种方法可以更新它的键值,使其通过整个搜索?
$('#search').keyup(function () {
if ($(this).val().length > 1) {
var searchthis = $(this).val()
if (srun === 1 && stimer) {
if (stimer) {
window.clearTimeout(stimer)
}
} else {
srun = 1
var stimer = setTimeout(loadsearch(searchthis), 2000)
}
}
})
loadsearch()将var srun设置为0;
最佳答案
显然,未设置srun时只会调用一次loadSearch。您应该像这样组织代码
//put timer outside
var stimer;
$('#search').keyup(function(e) {
if ($(this).val().length <= 1) {
return;
}
var searchthis = $(this).val();
window.clearTimeout(stimer);
stimer = setTimeout(function() {
loadsearch(searchthis);
}, 2000);
});
setTimeout
期望第一个参数是可调用的函数,因此setTimeout(function(){})
如果您输入
setTimeout(loadsearch(searchthis))
,它将直接执行loadSearch函数,而无需等待2秒。