我有一個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