我正在尝试使用Javascript构建一个非常简单的计时器(基于HTML表单的输入),而我的clearTimeout无法正常工作-甚至无法访问我拥有的console.log。在我的HTML中,只需调用clearTimeout。我真的不确定为什么它不起作用-任何帮助将不胜感激!谢谢!
function settimer(){
hour = document.getElementById('h').value;
minute = document.getElementById('m').value;
sec = document.getElementById('s').value;
hour = hour * 3600000;
minute = minute * 60000;
sec = sec * 1000;
totalTime = hour+minute+sec;
var timer = setTimeout(function(){alert("Time's up"); }, totalTime);
}
function clear(){
console.log("stopped")
clearTimeout(timer);
}
最佳答案
您在函数内声明了timer
变量,因此它的作用域仅在该函数本地。不能在函数外部调用它。要解决此问题,请将变量移出函数。
这是Mozilla开发人员网络的文档
https://msdn.microsoft.com/library/bzt2dkta(v=vs.94).aspx
首先,在任何函数之外声明timer
和total_time
变量,使其具有局部作用域。
var timer;
var total_time;
现在,创建用于设置计时器的函数。请注意,我们要使用var
关键字将这些变量设置为作用域局部变量。function setTimer(){
var hour = +(document.getElementById('h').value) * 3600000;
var minute = +(document.getElementById('m').value) * 60000;
var sec = +(document.getElementById('s').value) * 1000;
totalTime = hour + minute + sec; // Assign total time to variable
alert("Time's up");
}
将timer的值分配给setTimeout
。现在,我们可以将totalTime
变量用作时间量。timer = setTimeout(setTimer, totalTime);
现在,我们可以停止计时器,因为已为其指定了本地范围。function clear() {
console.log("stopped")
clearTimeout(timer);
}
现在应该可以工作了。再试一遍。