2015-01-11 5 views
-3

Я хочу отобразить один «Привет». каждую секунду, но следующий код делает 7 «Привет». одна секунда. Что мне делать?«setTimeout» и «for»

script.js

var main = function(){ 
for(var i=0; i<7; i++){ 
setTimeout(function(){$('div').append("Hi.");},1000); 
}; 

}; 

$(document).ready(main); 

index.html

<html> 
<head> 
</head> 
<body> 
<div></div> 
<script type="text/javascript" src="jquery.js"></script> 
<script type="text/javascript" src="script.js"></script> 
</body> 
</html> 
+0

код говорит, что это должно создать 7 таймаута, все из которых решительность после 1000 мс. Подумайте об изменении этой части. – zzzzBov

+0

вам может не понадобиться петля для этого? Каково использование? – goseo

ответ

0

Цикл for создает 7 тайм-аутов, которые заканчиваются через 1 секунду после завершения цикла. Вы можете увеличить тайм-аут по индексу цикла.

var main = function(){ 
 
    for(var i=0; i<7; i++){ 
 
     setTimeout(function(){$('div').append("Hi.");}, i * 1000); 
 
    }; 
 
}; 
 

 
$(document).ready(main);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div></div>

В качестве альтернативы, вы можете использовать setInterval и счетчик, чтобы очистить интервал на 7'th перспективе. Это было бы лучше для более длинных циклов.

var main = function(){ 
 
    var counter = 0; 
 
    var interval = setInterval(function() { 
 
     $('div').append("Hi."); 
 
     if(++counter >= 7) { 
 
      clearInterval(interval); 
 
     } 
 
    }, 1000); 
 
}; 
 

 
$(document).ready(main);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div></div>

+0

Почему вы используете 'setTimeout', когда у вас есть опция 'setInterval'? – Tarik

+0

@Tarik Оба способа будут работать. Я добавил пример setInterval. –

2

Вы хотите использовать setInterval вместо setTimeout.

Вы можете использовать setInterval с clearInterval, чтобы выполнить то, что вам нужно.