报警功能无法正常工作

时间:2016-08-10 00:49:06

标签: javascript jquery css

我有一个通过jQuery和Javascript创建的非常简单的警报应用程序。不幸的是,程序的警报方面不起作用。相关的代码片段在这里:

var today = new Date();
var h = today.getHours();
var m = today.getMinutes();
var s = today.getSeconds();

function startTime() {
  var today = new Date();
  var h = today.getHours();
  var m = today.getMinutes();
  var s = today.getSeconds();
    m = checkTime(m);
    s = checkTime(s);
    current_Time = h + ":" + m + ":" + s;
    document.getElementById('txt').innerHTML =
    current_Time;
    var t = setTimeout(startTime, 500);
}

function checkTime(i) {
    if (i < 10) {i = "0" + i};  // add zero in front of numbers < 10
    return i;
}

function checkForAlarm() {
  console.log("h :: " + h);
   console.log("m :: " + m);
   console.log("s :: " + s);
    if (h == 17 && m == 52 && s == 16) {
        console.log("play")
        //var audio = new Audio('Prince.mp3');
        audio.play();
    }
    else {
        console.log("not");
    }
}

window.setInterval(function(){
  checkForAlarm()
}, 1000);

如果我删除m和s变量并且h变量等于h,它运行正常,但如果我在请求的时间之前运行应用程序,音频永远不会运行。有人可以帮我解决这个问题。以下是完整的CodePen供参考:

http://codepen.io/kwikimart/pen/grkYoX

1 个答案:

答案 0 :(得分:1)

问题在于这段代码

  function startTime() {
        var today = new Date();
       --> var h = today.getHours();
       --> var m = today.getMinutes();
       --> var s = today.getSeconds();

您正在重新声明h, m, s函数的本地变量startTime

但是当您与全局范围中定义的h,m, s变量进行比较时,其值将在代码第一次运行时被引用。

var函数中定义的变量删除startTime

console.log方法中使用checkforAlarm语句,您会发现它仍然反映旧的时间戳。

<强> Codepen