2013-11-28 6 views
1

У меня есть 12 цветных квадратов, которые при нажатии кнопки выбираются случайным образом, а цвет фона изменен на черный.Выполнение кода внешнего цикла

Все квадраты меняли цвет одновременно, пока я не добавил функцию 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

Да, я понимаю, что ans, как я сказал выше, работает правильно в этом отношении, но вызывает код за пределами цикла, который должен быть выполнен первым. Функция Reset не предназначена для вызова до тех пор, пока цикл не будет выполнен. – 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

Смежные вопросы