2016-10-31 67 views
0

我剛剛遇到了一些問題。所以我有一系列的div名稱,我想將它們添加到class中,然後刪除它們以便設置它們。因此,首先顯示了在第二和半秒鐘後消失,並通過陣列後,第二等我下一次循環,並沒有真正發生的情況:/ 請幫我這個功能:/在少數項目中添加延遲

function showAndRepeat(){ 
 
    for(var z=0;z<clickNext.length;z++){ 
 
    console.log(colors[clickNext[z]]); 
 
    setTimeout(function(){$(colors[clickNext[z]]).addClass(colorNames[clickNext[z]])},1000); 
 
    setTimeout(function(){$(colors[clickNext[z]]).removeClass(colorNames[clickNext[z]])},1500); 
 
    } 
 
}

+0

除了給定的答案,for循環是同步的,你正在設置所有的'setTimeout'函數同時觸發。像'setTimeout(函數... bla bla,1000 *(z + 1))'和'setTimeout(函數... bla bla,1000 *(z + 1)+ 500)' – Redu

回答

0

假設jQuery代碼工作正常。 試試這個:

function showAndRepeat(){ 
    for(var z=0;z<clickNext.length;z++){ 
    console.log(colors[clickNext[z]]); 
    (function(zee){ 
     setTimeout(function(){$(colors[clickNext[zee]]).addClass(colorNames[clickNext[zee]])},1000); 
     setTimeout(function(){$(colors[clickNext[zee]]).removeClass(colorNames[clickNext[zee]])},1500);  
    })(z); 
    } 
} 

簡單地說,創建一個閉包。

for loop是同步操作,而setTimeout是異步操作。因此在執行setTimeout時,for循環已經運行並且最新值z被送入setTimeout呼叫。