Не работает settimeout в цикле
Простой пример
var l=1
for(var i=0; i<10; ++i){
(function(e){
setTimeout(function(){
if(l==1){
$('#component-1').css('background-color','#dddddd');
l=2;
}
if(l==2){
$('#component-1').css('background-color','red');
l=1;
}
},5000);
})(i)
}
Как я вижу это, десять раз будет изменен цвет у блока через каждые 5 сек. По факту, через пять секунд блок становится красным и скрипт остановлен. Подскажите, где ошибки и почему нет желаемого результата? |
Цитата:
Как некая иллюстрация содеянного...
<!DOCTYPE html>
<html>
<head>
<!--
<script src='http://code.jquery.com/jquery-latest.js'></script>
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
<link rel='stylesheet type=text/css href=tmp.css' />
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
for(var i=0; i<10; ++i){
(function(N){
setTimeout(function(){
var o=document.createElement('P');
o.innerHTML=N;
document.getElementById('test').appendChild(o);
},5000);
})(i)
};
</script>
</head>
<body>
<div id='test'></div>
</body>
</html>
|
Цитата:
|
Как вариант...
<!DOCTYPE html>
<html>
<head>
<script src='http://code.jquery.com/jquery-latest.js'></script>
<!--
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
<link rel='stylesheet type=text/css href=tmp.css' />
-->
<style type='text/css'>
#test {
background-color: #dddddd;
}
</style>
<script type='text/javascript'>
$(function(){
for (var i=0; i<10; ++i){
(function(e){
setTimeout(function(){
var o=$('#test');
if (o.data('iteration')==1){
o.css('background-color','#dddddd');
o.data('iteration',2);
} else {
o.css('background-color','red');
o.data('iteration',1);
}
},5000*(i+1));
})(i)
};
});
</script>
</head>
<body>
<div id='test'>Test</div>
</body>
</html>
|
Цитата:
|
Цитата:
|
Цитата:
|
Добрый вечер!
А как быть с 2-мя setTimeout в цикле, которые должны выполняться по очереди?
for(var i = 0; i <= 7; i++) {
(function(e) {
setTimeout(function() {
$('#block2 .variant:eq(' + e + ')').addClass('active');
setTimeout(function() {
$('#block2 .variant:eq(' + e + ')').removeClass('active');
}, timeout);
}, timeout);
})(i);
timeout += 200;
}
Сейчас сначала 10 раз выполняется один setTimeout, потом 10 раз другой. А должны они выполняться по очереди. |
mcreature, цикл убрать совсем. А setTimeoutы запускать друг из друга нужное количество раз...
|
Кроме setTimeout есть setInterval. Возможно, разобраться с ним будет проще.
|
| Часовой пояс GMT +3, время: 22:12. |