2011-03-21 143 views
2

我为即时搜索功能使用以下JavaScript(用于检测访问者何时停止写入,因此该功能不会在每个单独的键盘上运行)。使用Javascript的即时搜索功能

它可以工作,但比1000毫秒延迟更多。即使我将其设置为200毫秒,它在即时搜索功能运行之前的延迟为1-2秒。

有没有更好/更快的方式来检测访问者何时停止在输入中输入(如果这有什么区别,我只需要它的Internet Explorer)。

$(document).ready(function(){ 

var delay = (function(){ 
var timer = 0; 
return function(callback, ms){ 
clearTimeout (timer); 
timer = setTimeout(callback, ms); 
}; 
})(); 

$('input').keyup(function() { 
delay(function(){ 
//instant search function here 
}, 1000); 
}); 

}); 

新想法:当我想到这个问题时,问题是我不能在函数运行时继续在输入字段中写入数据。任何解决方案,我不会需要任何延迟功能。

回答

0

您的即时搜索功能是否发出AJAX请求以返回结果?这可能是将延迟设置为200毫秒,并在1-2秒后回复您的响应。

+0

谢谢回答。不,我没有提出Ajax请求。但我明白你的意思(当然你是对的)。如果我用一个简单的警报功能替换搜索功能,也有类似的行为。当我想到这个问题时,我不能在函数运行时继续在输入字段中写入数据。任何解决方案,我不会需要任何延迟功能。 – Hakan 2011-03-21 21:48:27

10
function instantSearch(){ ... } 

var timer; 
$('input').keyup(function(){ 
    timer && clearTimeout(timer); 
    timer = setTimeout(instantSearch, 200); 
}); 
+0

太可爱了。非常简洁。 – 2011-03-21 21:53:38

+0

太漂亮了。我甚至不关心它的性能;)谢谢! – Hakan 2011-03-21 22:00:55

+0

也许它工作得更好一点,不能说真的。在上面的例子中,你拼错了keyUp。你知道是否有办法让访问者继续在输入中写入,即使instantSearch函数运行? – Hakan 2011-03-21 22:17:40