我建立了一个类似于谷歌搜索的即时搜索功能。 setTimeout函数用于去抖动/限制搜索。但是,我不希望第一次执行searchq()函数的延迟。如何修改代码来实现这一目标?
var timeout = null;
function doDelayedSearch(txt) {
if (timeout) {
clearTimeout(timeout);
}
timeout = setTimeout(function() {
searchq(txt); //this is the search function (posting and fetching result)
}, 1000);
}
function searchq(txt){
// get the value
// txt = $("input").val();
// post the value
if(txt){
$.post("search.php", {searchVal: txt}, function(result){
$("#search_output").html(result+"<br><a class='anchor_tag_s' href='createobject.php?object="+txt+"'><div id='notfound'>Not found above? Create Here.</div><a>");
});
}
else{
$("#search_output").html("");
}
};
答案 0 :(得分:0)
简单,
在设置超时后调用该函数
编辑:当没有超时时调用该函数
function doDelayedSearch(txt) {
if (!timeout) {
searchq(txt); // the first time is the only time, there is no timeout
}
clearTimeout(timeout);
timeout = setTimeout(function() {
searchq(txt); //this is the search function (posting and fetching result)
}, 1000);
}
答案 1 :(得分:0)
尝试:
function doDelayedSearch(txt) {
clearTimeout(timeout); // clearTimeout(null) will not throw.
timeout = setTimeout(function() {
searchq(txt);
}, timeout ? 1000 : 0); // if timeout is null, then call with minimum delay, otherwise one second.
}
这样,始终从searchq()
调用setTimeout()
,但在timeout
仍为空时,第一次调用会有特殊情况。
答案 2 :(得分:0)
你可以作弊并设置一个全局变量。
global.firstExecution = true;
if (global.firstExecution == true) {
searchq(txt);
}
else {
var timeout = setTimeout(function() {
searchq(txt); //this is the search function (posting and fetching result)
}, 1000);
}
在你的功能中说:
global.firstExecution = false;
这不是一个迷人的解决方案,但它会起作用。