2016-11-11 14 views
2

我有下面的代码,它可以检测任何文本输入到#search-box字段,然后立即运行搜索(如果大于2个字符):jQuery的 - 搜索的文本输入 - 延迟,直到足月进入

$('#search-box').on('input', function() { 

    var term = $(this).val(); 
    if (term.length > 2) { 
     //execute search and display results 
    } 

}); 

虽然这看起来并不漂亮,例如,如果您输入dollar,在“玩偶”之后会出现一大堆玩偶,然后一旦输入dolla就会用美元代替。这可能会在瞬间发生。

我想要做的是确定用户是否已完成搜索词。在搜索之前是否可以等待一秒钟或两秒钟?如果在等待期间用户输入另一个字母,它会重置时钟?

+0

因此,基本上你需要如果用户输入dolla并且他想输入美元,那么我们将跳过所有请求,并且最终请求将是美元。当他完成键入美元,然后搜索请求将运行..? –

+0

是的!理想情况下,如果用户停止输入2秒钟,请运行请求。否则,跳过请求。 – Lee

回答

2

您将不得不使用setTimeout()等待输入。

var tim = ''; 
$('#search-box').on('input', function() { 
    clearTimeout(tim); 
    tim = setTimeout(my_func, 2000); //2000 means 2 seconds; 
}); 

function my_func() { 
    var term = $(this).val(); 
    if (term.length > 2) { 
     //execute search and display results 
    } 
} 

秒在ms,因此你也可以设置类似1500了一年半第二。

clearTimeout用于破坏tim中的值。在clearTimeout(tim)之后,tim变为零,然后在#search-box的长度增加/减少之后开始。

+0

如果用户键入“美元”,这个代码是否会运行4次,只是延迟2秒?或者它会被打断3次,只运行一次? – Lee

+0

您想要检测输入是否在字符串中包含'dollar'符号并且每次都运行您的自定义函数? –

+0

对不起,我选了一个可怜的字。想象一下,我输入“HELLO”。代码将运行3次:“HEL”,“HELL”和“HELLO”。我想避免这种情况,只有在等待2秒后才能运行。如果在击键之间时间少于此时间,则重置时钟。那有意义吗? – Lee