延迟过滤

时间:2014-05-28 07:38:16

标签: javascript html search javascript-events

我正在尝试在Javascript中执行延迟过滤器。基本上我有一个文本框,用户输入他的搜索词。但是,我不想过滤每个按键上的数据,而是在每次按键后等待3秒钟,然后一旦用户停止输入字符并且这3秒钟过去,则过滤/搜索会触发。

下面是我的尝试,但是每次输入一个角色后,搜索都会在3秒后触发。有人能告诉我我做错了什么吗?另外,有没有办法自动抓取文本字段内的文本而不指定输入id / class(想法是对不同的文本字段使用相同的功能)?如果可能的话,我想在不需要jQuery的情况下保持简单的Javascript。

HTML:

<input type="text" id="search" onKeyDown="filter(3);">

JS:

function filter(secs) {

 var delay = 0;
 var delayTimeout;

 delay = secs*1000;
 clearTimeout(delayTimeout);

 delayTimeout = setTimeout(mySearchFunction, delay);

}

function mySearchFunction() {
   searchterm = document.getElementById('search').value;
   alert("Searching for: " + searchterm);   
}

1 个答案:

答案 0 :(得分:1)

delayTimeout声明移出filter功能:

var delay = 0;
var delayTimeout;

function filter(sec){
    // etc

否则,每次调用delayTimeout时都会重置filter(),这意味着clearTimeout(delayTimeout)无法再清除超时。