Javascript:如何使setTimeout不延迟第一次执行?

时间:2016-02-13 01:36:35

标签: javascript jquery html search

我建立了一个类似于谷歌搜索的即时搜索功能。 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("");
            }
        };

3 个答案:

答案 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;

这不是一个迷人的解决方案,但它会起作用。