【问题标题】:Delayed Filtering延迟过滤
【发布时间】:2014-05-28 07:38:15
【问题描述】:

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

以下是我的尝试,但是每次我输入一个字符时,搜索都会在 3 秒后触发。有人可以告诉我我做错了什么吗?此外,有没有一种方法可以自动抓取文本字段内的文本而不分配输入 ID/类(想法是对不同的文本字段使用相同的功能)?如果可能的话,我想保持纯 Javascript 而不需要 jQuery。

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);   
}

【问题讨论】:

    标签: javascript html search dom-events


    【解决方案1】:

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

    var delay = 0;
    var delayTimeout;
    
    function filter(sec){
        // etc
    

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

    【讨论】:

    • 那么,@user1809790,这个答案对你有帮助吗?还是你需要别的东西?
    • 感谢您的回答。这解决了它的主要部分:) 现在,有没有一种方法可以获取传递给搜索函数的文本框的值,而无需在文本字段上分配 ID 或类,然后将值作为 document.getElementById('搜索').value; ?
    • @user1809790:不是真的,不。 id 通常是尝试获取输入内容(/值)时要走的路
    • 没有办法使用“this”命令吧? (对不起,如果这很愚蠢,我是新手)
    • @user1809790:嗯,我想你可以使用this.value。尝试没有坏处;-)
    猜你喜欢
    • 2011-08-23
    • 2012-11-27
    • 1970-01-01
    • 2015-12-12
    • 2017-10-07
    • 2017-12-11
    • 2021-10-26
    • 2015-10-09
    • 1970-01-01
    相关资源
    最近更新 更多