我写了以下计时功能,但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();
}
}
我不确定会出现什么问题,因为当我添加代码以显示startTime
和currentTime
的值时,它们会显示为数字,但是当我尝试显示timer
时只给我NaN
,因此if语句永远不会评估为TRUE
。不知道这里出了什么问题但是我已经没有关于如何使这个工作的想法。
答案 0 :(得分:2)
将你的startTime声明移到if
之外var startTime;
if (timer == 0) {
startTime = Date.now();
}
答案 1 :(得分:2)
if (timer == 0) {
var startTime = Date.now();
}
startTime
仅在timer
为0
时定义。您还必须在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秒才能完成。