Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 不停_Javascript_Ajax - Fatal编程技术网

Javascript 不停

Javascript 不停,javascript,ajax,Javascript,Ajax,我正在做一个测验,如果用户在答案为3的时间内没有回答问题,他有5秒钟的时间来回答问题(这是表示没有答案的代码)。计时器的更新很好,直到你回答一个问题,从那一点开始计时器失控你看到5,3,4,0,然后进入下一个问题,回答3有人知道如何杀死老计时器吗 function tijd(aantalSec){ document.getElementById("sec").innerHTML = aantalSec; if(aantalSec == 0){ clearTi

我正在做一个测验,如果用户在答案为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);
   }
}

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

全局变量是邪恶的。

使用函数属性作为静态变量可以消除对丑陋全局变量的需要。请看我的答案。非常感谢,它解决了这个问题:-)使用函数属性作为静态变量消除了对丑陋全局变量的需要。看到我的答案了。非常感谢。它解决了问题:-)