我正在尝试使用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
首先,在任何函数之外声明timertotal_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);
}
现在应该可以工作了。再试一遍。

10-05 21:07
查看更多