2013-11-28 205 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

相关问题