javascript 时间增加了它在第二个循环中的速度

The javascript for the time increases it's speed on the second loop

帮我调试这段代码。该按钮应该打开一个 link onclick 并且主页上的访问按钮将被禁用并且它的值将成为一个计时器。第一次点击没有问题,但是当计时器用完并且我再次点击按钮时,时钟的速度会增加。请帮我。

<html>
<head>
    <script type = "text/javascript">

    var t;
    var isTimeron = false;
    var counter = 0;
    function disableButt()
    {

    document.getElementById("but1").disabled = true;

    }

    function enableVisit()
    {
        document.getElementById("but1").disabled = false;
    }   

    function stopMe()
    {
        isTimeron = false;
            clearTimeout(t);

    }

    function countdown()
    {
        document.getElementById("but1").value = counter;
        counter--;
        if (counter <= -1)
        {
        stopMe();
        document.getElementById("but1").value = "VISIT";
        document.getElementById("but1").disabled = false;
        enableVisit();
        }
        t = setTimeout("countdown();", 1000);
    }

    function startMe()  {
        if (!isTimeron)
        {
            counter = 10;
            isTimeron = true;
            countdown();    

        }

    }



     </script>
<body>

<a href='' target = '_blank'><input type = "button" id = "but1" value = "VISIT" style="background:#83FF59; font-weight:bold;"
    onclick = "startMe(); disableButt();"/></a>

</body>
</html>

您没有停止第一个计时器。

function countdown()
{
    document.getElementById("but1").value = counter;
    counter--;
    if (counter <= -1)
    {
    stopMe();
    document.getElementById("but1").value = "VISIT";
    document.getElementById("but1").disabled = false;
    enableVisit();
    }
    t = setTimeout("countdown();", 1000);
}

计数器低于零,您通过调用 setTimeout 来调用 stopMe()。您现在有两个计时器在运行。

改成

function countdown()
{
    document.getElementById("but1").value = counter;
    counter--;
    if (counter <= -1)
    {
    stopMe();
    document.getElementById("but1").value = "VISIT";
    document.getElementById("but1").disabled = false;
    enableVisit();
    return;
    }
    t = setTimeout("countdown();", 1000);
}

小建议避免在 setTimeout 中使用字符串。

setTimout(countdown, 1000);

更好