date.now()比较返回NaN

时间:2014-02-20 05:20:21

标签: javascript

我写了以下计时功能,但timer = currentTime - startTime;一直给我NaN

var timer = 0;
var currentTime = 0;
var trialTime = 5;

window.onload = function() {
    setInterval(addtime,10);
};

function addtime() {
    if (timer == 0) {
        var startTime = Date.now();
    }
    currentTime = Date.now();
    timer = currentTime - startTime;

    if (timer >= (trialTime*1000)) {
        timer = 0;
        $("form").submit();
    }
}

我不确定会出现什么问题,因为当我添加代码以显示startTimecurrentTime的值时,它们会显示为数字,但是当我尝试显示timer时只给我NaN,因此if语句永远不会评估为TRUE。不知道这里出了什么问题但是我已经没有关于如何使这个工作的想法。

3 个答案:

答案 0 :(得分:2)

将你的startTime声明移到if

之外
var startTime;
if (timer == 0) {
    startTime = Date.now();
}

答案 1 :(得分:2)

if (timer == 0) {
    var startTime = Date.now();
}

startTime仅在timer0时定义。您还必须在startTime函数之外定义addTime

但是根据您的代码,您似乎只想延迟提交表单。

只需使用setTimeout,就会非常简单和干净。

var trialTime = 5;

window.onload = function() {
    setTimeout(function() {
         $("form").submit();
    }, trialTime * 1000);
};

答案 2 :(得分:0)

请注意, setInterval 不会以指定的时间间隔运行,它只会在间隔后尽快运行。因此,它会漂移,随后的呼叫可能会或可能不会在您期望的时刻发生。

考虑使用如下模式:

window.onload = (function() {

    // Keep these variables in closures so not global but still
    // accessible to function called by setInterval
    var timer = 0;
    var currentTime = 0;
    var trialTime = 5;
    var regKey;
    var startTime;

    function addtime() {
      if (timer == 0) {
        startTime = Date.now();
      }
      currentTime = Date.now();
      timer = currentTime - startTime;

      if (timer >= (trialTime * 1000)) {
        timer = 0;
        console.log('done');

        // Cancel the timer when you're finished with it
        clearInterval(regKey);

        // Do whatever else

      }
    }

    return function() {
      // Keep a timer reference so it can be cancelled
      regKey = setInterval(addtime, 10);
    };
}());

我仍然不明白为什么每10分钟调用一次计时器,但至少 5秒没有做任何事情。在我的机器上,这需要大约20秒才能完成。