Javascript 延迟滤波

Javascript 延迟滤波,javascript,html,search,javascript-events,Javascript,Html,Search,Javascript Events,我试图用Javascript做一个延迟过滤器。基本上我有一个文本框,用户在其中输入他的搜索词。但是,我不想过滤每个按键上的数据,而是在每次按键后等待3秒钟,然后一旦用户停止输入字符,这3秒钟过后,过滤/搜索就会启动 下面是我的尝试,但是每次我输入一个字符,搜索都会在3秒后启动。有人能告诉我我做错了什么吗?另外,是否有一种方法可以在不指定输入id/类的情况下自动获取文本字段中的文本(其思想是对不同的文本字段使用相同的函数)?如果可能的话,我想让它保持简单的Javascript,而不需要jQuery

我试图用Javascript做一个延迟过滤器。基本上我有一个文本框,用户在其中输入他的搜索词。但是,我不想过滤每个按键上的数据,而是在每次按键后等待3秒钟,然后一旦用户停止输入字符,这3秒钟过后,过滤/搜索就会启动

下面是我的尝试,但是每次我输入一个字符,搜索都会在3秒后启动。有人能告诉我我做错了什么吗?另外,是否有一种方法可以在不指定输入id/类的情况下自动获取文本字段中的文本(其思想是对不同的文本字段使用相同的函数)?如果可能的话,我想让它保持简单的Javascript,而不需要jQuery

HTML:


将您的
delayTimeout
声明移出
filter
函数:

var delay = 0;
var delayTimeout;

function filter(sec){
    // etc

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

那么,@user1809790,这个答案对您有帮助吗?或者你还需要别的吗?谢谢你的回答。这解决了它的主要部分:)现在,有没有一种方法可以获得传递给搜索函数的textbox的值,而不必在textfield上分配ID或类,然后以document.getElementById('search').value@user1809790:不是,不是。当试图获取输入内容(/值)时,
id
通常是一种方法。没有办法使用“this”命令,对吗?(如果这很愚蠢,很抱歉,我是新手)@user1809790:Hm,我想你可以使用
this.value
。试一试没有坏处;-)
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);   
}
var delay = 0;
var delayTimeout;

function filter(sec){
    // etc