Javascript 不停
我正在做一个测验,如果用户在答案为3的时间内没有回答问题,他有5秒钟的时间来回答问题(这是表示没有答案的代码)。计时器的更新很好,直到你回答一个问题,从那一点开始计时器失控你看到5,3,4,0,然后进入下一个问题,回答3有人知道如何杀死老计时器吗Javascript 不停,javascript,ajax,Javascript,Ajax,我正在做一个测验,如果用户在答案为3的时间内没有回答问题,他有5秒钟的时间来回答问题(这是表示没有答案的代码)。计时器的更新很好,直到你回答一个问题,从那一点开始计时器失控你看到5,3,4,0,然后进入下一个问题,回答3有人知道如何杀死老计时器吗 function tijd(aantalSec){ document.getElementById("sec").innerHTML = aantalSec; if(aantalSec == 0){ clearTi
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);
}
}
这是一个范围问题。将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);
}
}
您应该尝试在函数外部声明
var tijd
并将timerID更改为rahul提到的其他内容。您应该尝试在函数外部声明var tijd
并将timerID更改为rahul提到的其他内容。在函数外部声明tijd以使其全局化。另外,重命名它,让变量名与函数名相同会让人感到困惑。在函数外部声明tijd,使其成为全局变量。另外,重命名它,让变量名与函数名相同会让人困惑。这是一个范围问题,就像rahul所说的,但更好的解决方案是使用静态变量。您可以在javascript中轻松实现这一点,因为函数是对象。因此:
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);
}
}
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
,它在函数调用之间保持不变
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);
}
}
全局变量是邪恶的。正如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
,它在函数调用之间保持不变
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);
}
}
全局变量是邪恶的。使用函数属性作为静态变量可以消除对丑陋全局变量的需要。请看我的答案。非常感谢,它解决了这个问题:-)使用函数属性作为静态变量消除了对丑陋全局变量的需要。看到我的答案了。非常感谢。它解决了问题:-)