2010-04-29 60 views
0

我正在构建一个测验,如果在回答为3(这是无回答的代码)的时间内没有回复,用户有5秒钟的时间回答问题。定时器更新很好,直到你从这一点回答一个问题,定时器失控5,3,4,0,然后回答下一个问题3有人知道如何杀死旧定时器吗?setTimout不停止

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); 
    } 
    } 

回答

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); 
    } 
} 
+0

。变量消除了一个丑陋的全球需要。看到我的答案。 – Stomped 2010-04-29 10:33:28

+0

非常感谢你解决了这个问题:-) – Ken 2010-04-29 10:38:03

1

你应该尝试声明var tijd外功能和更改的timerId别的东西像提到拉胡尔。

1

在函数之外声明tijd使其成为全局函数。另外,重命名它,将变量的名称与函数的名称相同,这是令人困惑的。

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成为调用函数之间的持续性

全局是邪恶