JavaScript - setInterval只运行一次

An0*_*d3r 1 javascript jquery setinterval

http://jsfiddle.net/689nauny/

setInterval()只运行一次...... WTF正在进行中?

SO正在询问更多细节,但提供一个JSFiddle就像我可以描述一样?我尝试过使用匿名函数,现在又回调了.我只是不明白吗?: - /

HTML

<script src="http://code.jquery.com/jquery-2.1.3.min.js"></script>

<div id="qanda-timer-container">
    <div class="qanda-timer">
        <span id="qanda-time-remaining"></span>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

JS

    function intervalFunc(thinkingTime, answerTime)
    {
        jQuery('#qanda-time-remaining').text(''+(thinkingTime - 1));
    }

    function enableTimer(time)
    {
        var intervalID;
        var hasThinkingTime = true;
        var thinkingTime = time;

        var hasAnswerTime = true;
        var answerTime = 10;

        if(hasThinkingTime && hasAnswerTime)
        {
            setInterval( intervalFunc(thinkingTime, answerTime), 1000);
        }

        setTimeout(function(){ 

            clearInterval(intervalID);

        }, time * 1000);
    }

enableTimer(30);
Run Code Online (Sandbox Code Playgroud)

Poi*_*nty 8

您需要在函数中包装区间处理程序:

        intervalId = setInterval( function() { intervalFunc(thinkingTime, answerTime) }, 1000);
Run Code Online (Sandbox Code Playgroud)

您发布的代码是调用函数并将结果传递给setInterval().间隔计时器根本没有运行!

执行此操作后,您需要解决维护降序时间值的问题.目前,您将变量作为参数传递并从中减去一个,但不更新原始变量.

function intervalFunc(thinkingTime, answerTime)
{
    jQuery('#qanda-time-remaining').text(''+(thinkingTime));
}
Run Code Online (Sandbox Code Playgroud)

然后更改setInterval设置:

    intervalId = setInterval( function() { intervalFunc(--thinkingTime, answerTime) }, 1000);

}
Run Code Online (Sandbox Code Playgroud)

  • @AdamJeffers - 它在该更新中多次运行,你没有减少数量,所以每次setInterval运行时你得到相同的输出 (2认同)