我有一个在 DOM 中搜索并在列表中显示结果的 jQuery 脚本。
这里有脚本的简化版本:http: //jsfiddle.net/FuJta/1/
通常有大量结果,因此脚本可能需要一段时间才能执行。(在上面的示例中,这是使用延迟脚本的函数进行模拟的)。因此,如果您在搜索框中输入得太快,脚本会阻止您输入,并且感觉很糟糕。
我怎样才能更改我的脚本,以便您可以自由输入,并在准备好时显示结果。我想要类似 facebook 搜索的东西:如果你输入得太快,结果就会延迟,但你仍然可以输入。
html
<p>Type in foo, bar or baz for searching. It works, but it is quite slow.</p><br/>
<input type="text" id="search"/>
<div id="container" style="display:none">
<div class="element">foo</div>
<div class="element">bar</div>
<div class="element">baz</div>
</div>
<div id="results">
</div>
Javascript
$(function() {
function refreshResults() {
var search = $('#search').val();
var $filtered = $('#container .element').clone().filter(function() {
var info = $(this).text();
return info.toLowerCase().indexOf(search) >= 0;
});
$('#results').empty();
$filtered.each(function() {
$('#results').append($(this));
});
}
// simulating script delay
function pausecomp(millis) {
var date = new Date();
var curDate = null;
do {
curDate = new Date();
}
while (curDate - date < millis);
}
$('#search').keyup(function() {
pausecomp(700);
refreshResults();
});
});
一种解决方案可以仅在按 Enter 时刷新结果。这样,搜索结果的延迟感觉还可以。但如果我只是延迟结果并让用户自由输入,我更愿意。