我基本上試圖通過LI標記的集合進行循環,並插入一些文本來模擬某人編寫要做的事情列表的外觀。它可以工作,但它會同時寫入每個列表項,而不是等待。有沒有簡單的方法來實現這一目標?我有一個JS小提琴安裝在這裏:http://jsfiddle.net/fZpzT/但代碼看起來像這樣。謝謝。jquery .each等待函數在繼續循環之前完成
function addListItems() {
var str = {
listitem1:'personal background check',
listitem2:'look into my sketchy neighbor',
listitem3:'look up my driving record',
listitem4:'pick up milk',
listitem5:'wash the car'
}
$('.list-container li').each(function(){
var z = $(this).attr('id');
var str2 = str[z];
var delay = 0;
for (var i = 0; i <= str2.length; i++) {
(function(str2){
delay += 100 + Math.floor(Math.random()*11)*6;
setTimeout(function(){
appendStr(str2);
},delay);
})(str2[i])
}
function appendStr(str2) {
$('#'+ z).append(str2);
}
});
}
1用於阱書面問題和的jsfiddle例子。我不能立即確定*解決方案*是什麼,但我很確定問題是**不是**'.each()',而是使用'setTimeout()'。 'setTimeout()'是異步執行的,這意味着整個循環迭代完成(不是同時),但完成*非常快*,然後'setTimeout'函數處理程序在循環結束後開始工作。 – Snixtor 2013-02-13 01:57:54
我會在[這裏](http://api.jquery.com/category/deferred-object/)尋找關於如何使用'deferred'鏈接這些函數的一些想法。 – Aesthete 2013-02-13 02:03:18
我同意Snixtor的解釋,並補充說,你應該根據你正在使用的列表項來增加延遲值(你可以使用'each(function(index){...'來獲得索引)。第一個項目需要延遲,但是你可以延遲第二個項目1秒,第三個和第二個等等,這會增加每秒添加一個列表項的效果。 – 2013-02-13 02:03:24