2013-12-13 20 views
0

JS:Добавить цикл в SetTimeout

setTimeout(function() { 
    $('#houses div:last').after('<div class="item current-last '+ randClass +'"></div>'); 

}, 2000); 

Но как только один раз. Я хочу цикл. Как я могу это исправить?

var house = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']; 
randClass = house[Math.floor(Math.random() * house.length)]; 
+0

Try 'setInterval' – tewathia

ответ

3

Использование setInterval вместо setTimeout. Первый устанавливает таймер, который вызывается на интервале, тогда как позднее устанавливает таймер, который вызывается только один раз.

Также вызывайте код рандомизации каждый раз, когда вы изменяете DOM. Самый простой способ сделать это, чтобы включить его в функции интервальной следующим образом:

setInterval(function() { 
    var house = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']; 
    var randClass = house[Math.floor(Math.random() * house.length)]; 

    $('#houses div:last').after('<div class="item current-last '+ randClass +'"></div>'); 
}, 2000); 
+0

Да, это работает. Но получайте такое же значение randClass. Я хочу изменить каждый setInterval. – user3099199

+0

@ user3099199 поэтому установить новое значение randClass внутри интервала ... –

+0

Как я могу это сделать? – user3099199

2

Вы должны использовать:

setInterval(//insert your function and interval here) 

Это позволит решить проблему «выполнить только один раз».

Что касается желаний получить разные значения randClass, вам необходимо управлять этим, сделать что-то, что изменяет значение randClass, между интервалами, в соответствии с вашими потребностями. Как предложил @Ланелло, вы можете его рандомизировать. Или, возможно, увеличить его. Независимо от того, что диктует ваша прикладная логика.

+0

Да, это работает. Но получайте такое же значение randClass. Я хочу изменить каждый setInterval. – user3099199

+0

Ну, вы должны быть уверены, что значение randClass изменяется между интервалами. Что такое randClass и откуда он? Возможно, вы могли бы добавить код, чтобы прояснить это в своем вопросе? – nestedloop

0

вы просто должны написать

function RandomizeClass() 

и называют его внутри SetTimeout, вместо того, чтобы писать его внутри, конечно, вы установите значение randClass перед SetTimeout, а затем его значение не изменится.

0

Попробуйте это:

var intv = setInterval(test, 2000); 
// you can also clear the interval 
// by use clearInterval(intv); 
function test(){ 
    $('#houses div:last').after('<div class="item current-last '+ randClass +'"></div>'); 
} 
Смежные вопросы