我正在建立测验,如果用户在回答为3的时间内未回答,则用户有5秒钟的时间回答该问题(这是没有回答的代码)。计时器会很好地更新,直到您从那时开始回答问题为止,计时器就会失控,看到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);
    }
    }

最佳答案

它是一个范围问题。将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);
   }
}

关于javascript - setTimeout没有停止,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2736532/

10-11 14:26