我有一个jQuery脚本,在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();
});
});
一种解决方案可以只按下输入时刷新结果。这样,搜索结果的延迟感觉很好。但我宁愿只是推迟结果,让用户自由输入。
可能的重复http://stackoverflow.com/questions/5913181/how-to-delay-keypress-function-when-user-is-typing-so-it-doesnt-fire-a-request – Marc
啊,有我正要发布的答案;)叹息..那些重复..:D – dbf
为什么你不看看自动完成功能是如何工作的,我想你正试图在这里创建相同的结果。可能会有帮助。 – Pratik