Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Неверно работает функция setTimeout()

Sanchez Знаток (353), на голосовании 11 лет назад
С помощью функции хочу изменить фон соответствующей ячейки в таблице.
Сама таблица содержит 25 строк. Метод d_white и d_orange меняют фон на белый и оранжевый соответственно. Я их проверял, они работают верно.
При запуске метода startclr в таблице все ячейки моментально становятся оранжевыми (вне зависимости от того, какую задержку я установил в setTimeot - 10 или 50000).
Ещё пробовал поставить в цикле alert('Message"). Мне выдавало 25 сообщений, опять же, моментально, без задержки.
В чем проблема?
Дополнен 11 лет назад
1) пробовал прописывать без 'window.' - то же самое
2) пробовал даже так: setTimeout("function() {d_white();}",5000);
не помогло
Голосование за лучший ответ
vasileman1984 Гуру (4302) 11 лет назад
Я так подозреваю, они окрашиваются не моментально, а просто все сразу. Вы просто не до конца поняли, как работает setTimeout - она не ждет, пока пройдет 1000 миллисекунд, а просто заставляет браузер запланировать выполнение кода через определенное время после текущего момента, и возвращает управление сразу же, не дожидаясь выполнения. Вы крутите цикл в обработчике:
for (i = 0; i < 25; i++) { window.setTimeout(...); }
и двадцать пять раз планируете выполнение функции через секунду (ведь на тот момент, когда закончилось выполнение window.setTimeout, прошла не секунда, а гораздо меньше времени. Чтоб сделать то, что вы хотите, нужно вызывать setTimeout в конце d_orange и d_white.
Похожие вопросы