2013-12-02 3 views
0

У меня есть следующий код:Javascript, добавив переменную дважды

var m = 0; 
function addmoney(){ 
    var today = new Date(); 
    var s =today.getSeconds(); 
    if(s == 30){ 
     m += 10; 
    } 
    document.getElementById('mon').innerHTML=s+" money: "+m; 
    t=setTimeout(function(){addmoney()},500); 
} 

В основном то, что я делаю это, чтобы добавить 10 к значению м через каждые 30 секунд. Проблема здесь в том, что переменная фактически добавляется дважды. Мне было интересно, почему так было?

EDIT: Извините, не хотел делать s ++, так или иначе это не сильно изменилось.

+4

FYI, 'setTimeout (function() {addmoney()}, 500)' проще записать как 'setTimeout (addmoney, 500)' –

+0

, когда и как вы называете 'addmoney()' впервые? –

+1

Вы устанавливаете функцию таймаута для вызова через 0,5 секунды. getSeconds() возвращает только полные секунды. Поэтому, если вы вызываете функцию, например, 12:30:01 100ms, который возвращает 30 секунд, и следующий вызов разрешается достаточно быстро, следующая дата может быть 12:30:01 700 мс, которая также возвращает 30 секунд m, увеличивается в этот момент дважды ... чтобы быть в безопасности, set timeout to 1000ms;) – Igle

ответ

5

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

var m = 0, 
    mon = document.getElementById('mon'); 

var interval = window.setInterval(function() { 
    m += 10; 
    mon.innerHTML = "money: " + m; 
}, 30000); 

Если по какой-либо причине вы хотели бы прекратить добавлять деньги, вы можете использовать window.clearInterval

// stop collecting monies! 
clearInterval(interval); 

Here's a jsbin.com demo

+0

Отлично! Спасибо. Я отвечу, как только смогу. – WToa

0

Добавьте небольшое изменение к нему

if(s == 30 || s == 0) 

Это происходит потому, что в системе счетчик секунд получает сбрасывается в 0 после того, как она пересекает 60

0

Причина заключается в том, что переменная s переписывается в интервалах времени 500мс (так s++ трюк не работает). Увеличьте интервал или используйте глобальную переменную для сохранения последнего времени.

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