setTimout не останавливается - PullRequest
       11

setTimout не останавливается

0 голосов
/ 29 апреля 2010

Я создаю тест, и у пользователя есть 5 секунд, чтобы ответить на вопрос, если он не отвечает в течение времени, когда ответ равен 3 (что является кодом для отсутствия ответа). Таймер обновляется очень хорошо, пока вы не ответите на вопрос, с этого момента таймер выходит из-под контроля, вы видите 5,3,4,0 и переходите к следующему вопросу с ответом 3 Кто-нибудь знает, как убить старый таймер?

  function tijd(aantalSec){
    document.getElementById("sec").innerHTML = aantalSec;

    if(aantalSec == 0){
        clearTimeout(tijd);
        antwoord(3);
    }else{
        aantalSec = aantalSec - 1;
        var tijd = setTimeout('tijd(' + aantalSec + ',0)',1000);
    }
    }

Ответы [ 4 ]

2 голосов
/ 29 апреля 2010

Это вопрос сферы. Возьмите tijid в качестве глобальной переменной. Также переименуйте вашу переменную в другое имя, потому что это путает с именем функции.

var intrID;

function tijd(aantalSec)
{       
   document.getElementById("sec").innerHTML = aantalSec;

   if(aantalSec == 0)
   {
       clearTimeout(intrID);
       antwoord(3);
   }
   else
   {
       aantalSec = aantalSec - 1;
       intrID = setTimeout('tijd(' + aantalSec + ',0)',1000);
   }
}
1 голос
/ 29 апреля 2010

Как сказал Рахул, это проблема объема, но лучшим решением было бы использование статической переменной. Вы можете легко сделать это в javascript, потому что функции являются объектами. Итак:

function tijd(aantalSec){

    document.getElementById("sec").innerHTML = aantalSec;

    if(aantalSec == 0){
        clearTimeout(tijd.timer);
        antwoord(3);
    }else{
        aantalSec = aantalSec - 1;
        tijd.timer = setTimeout('tijd(' + aantalSec + ',0)',1000);
    }
    }

Важные биты - я изменил вашу переменную с var tijd на tijd.timer, которая становится постоянной между вызовами функции.

Глобалы - это зло.

1 голос
/ 29 апреля 2010

Объявите tijd вне функции, чтобы сделать его глобальным. Кроме того, переименуйте его, сбивает с толку, когда имя переменной совпадает с именем функции.

1 голос
/ 29 апреля 2010

Вы должны попытаться объявить var tijd вне функции и изменить timerID на что-то еще, как упоминалось в rahul.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...