我正在建立一个测验,如果他在答案为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);
}
}
答案 0 :(得分:2)
这是一个范围问题。把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 :(得分:1)
您应该尝试声明var tijd
外部函数,并将timerID更改为rahul提到的其他内容。
答案 2 :(得分:1)
在函数外声明tijd使其成为全局的。此外,重命名它,让变量的名称与函数名称相同是令人困惑的。
答案 3 :(得分:1)
这是像rahul所说的范围问题,但更好的解决方案是使用静态变量。您可以在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
,这在调用函数之间变得持久。
全球是邪恶的。