2013-11-28 168 views
1

我有12個彩色方塊,點擊一個按鈕時,隨機選擇6個,背景顏色變爲黑色。代碼循環外執行第一個

正方形都在同時改變顏色,直到我添加了setTimeout函數,該函數修復了該問題但又導致了另一個問題 - 循環之外的代碼在循環之前執行,即調用Reset函數和警報。

for (var i = 0; i < 6;i++) 
{ 
setTimeout(function() 
{ 
    var rand = arr[Math.floor(Math.random() * arr.length)];  
    var square = document.getElementById('square' + rand); 
    square.style.background="black"; 
},1000 * i); 
} 

Reset() 
alert("Reset function") 

我認爲setTimeout函數在某種程度上導致了這種情況 - 有沒有辦法解決這個問題?

謝謝。

+0

是不是超時的目的是什麼? –

+0

嚴重的是,我不明白你的問題,因爲你描述的是完全超時的目的,推遲執行任何代碼或功能 –

+0

是的,我明白,正如我所說的,它在這方面工作正常,但造成首先執行循環外的代碼。復位功能並不意味着要在循環執行之後調用。 – user3047072

回答

1

使用截止時間應解決您的問題:

var length = 6; 

for (var i = 0; i < length ; i++) 
(function (i) { 
    setTimeout(function() { 
     var rand = arr[Math.floor(Math.random() * arr.length)]; 
     var square = document.getElementById('square' + rand); 
     square.style.background = "black"; 
     if (i === length - 1) Reset(); 

    }, 1000 * i); 
})(i); 


function Reset() { 
    alert("Reset function") 
} 
0

如果我不得不猜測我會說這個錯誤是由for循環周圍丟失的大括號引起的。之前的setTimeout和你的循環的最後一部分後應該有一個{}或

+0

不,這是可選 –

+0

謝謝,但包括丟失的大括號沒有任何區別。 – user3047072

相關問題