2016-02-26 53 views
0

为什么我的倒计时没有停在0?

//Not finished -- disregard 
 
function evaluate() { 
 
    var cdate = new Date(); 
 
    var cday = cdate.getDay(); 
 
    var chr = cdate.getHours(); 
 
    var cmin = cdate.getMinutes(); 
 
    var csec = cdate.getSeconds(); 
 
    //Luni 
 
    if (cday === 1) { 
 
    countDown(5, 0, 0, 100, "countdown") 
 
    } 
 
    //Marti sau Miercuri 
 
    if ((cday === 2) || (cday === 3)) { 
 
    countDown(5, 0, 0, 0, "countdown") 
 
    } 
 
    //Joi 
 
    if (cday === 4) { 
 
    countDown(0, 0, 0, 100, "countdown") 
 
    } 
 
    //Vineri sau Sambata 
 
    if ((cday === 5) || (cday === 6)) { 
 
    countDown(5, 0, 0, 0, "countdown") 
 
    } 
 
    //Duminica 
 
    if (cday === 0) { 
 
    countDown(5, 0, 0, 0, "countdown") 
 
    } 
 
} 
 

 
function countDown(sec, min, hour, day, elem) { 
 
    var element = document.getElementById(elem); 
 
    element.innerHTML = "Urmatorul eveniment este in " + day + " zile " + hour + " ore " + min + " minute " + sec + " secunde."; 
 
    if ((sec === 0) && (min > 0)) { 
 
    sec = 59; 
 
    min = min - 1; 
 
    } 
 
    if ((sec === 0) && (min === 0) && (hour > 0)) { 
 
    sec = 59; 
 
    min = 59; 
 
    hour = hour - 1; 
 
    } 
 
    if ((sec === 0) && (min === 0) && (hour === 0) && (day > 0)) { 
 
    sec = 59; 
 
    min = 59; 
 
    hour = 23; 
 
    day = day - 1; 
 
    } 
 

 
    if ((min < 0) && (day > 0)) { 
 
    min = 59; 
 
    day = day - 1; 
 
    } 
 
    if ((min < 0) && (day === 0) && (day > 0)) { 
 
    min = 59; 
 
    hour = 23; 
 
    day = day - 1; 
 
    } 
 

 
    if ((hour < 0) && (day > 0)) { 
 
    hour = 23; 
 
    day = day - 1; 
 
    } 
 
    //Here is the deadline if 
 
    if ((day === 0) && (hour === 0) && (min === 0) && (sec < 0)) { 
 
    clearTimeout(timer); 
 
    elem.innerHTML = "Evenimentul este in decurs!"; 
 
    } 
 
    sec--; 
 
    var timer = setTimeout('countDown(' + sec + ',' + min + ',' + hour + ',' + day + ',"' + elem + '")', 1000); 
 
} 
 
evaluate();
<p id="countdown"></p>

我的JavaScript无法正常工作。当所有值都达到0时,定时器应该清除。

我的目标是:评估日期 - >显示 - >重置。

if ((day === 0) && (hour === 0) && (min === 0) && (sec < 0)) { 
    clearTimeout(timer); 
} 

任何人都可以帮助我吗? 我已经设置了一个代码片段。先谢谢你。

+0

尝试:'window.clearTimeout(定时器);' – Derek

+0

此外,您还需要声明'time'在全球范围内 – Derek

+0

嗯,你在呼唤再次setTimeout,即使你做了clearTimeout。那么你期望什么?也许在'clearTimeout ...'后加''return;'' – trincot

回答

1

您需要的条件更改为sec <= 0,减少内部else声明

if ((day === 0) && (hour === 0) && (min === 0) && (sec <= 0)) { 
    clearTimeout(timer); 
    elem.innerHTML = "Evenimentul este in decurs!"; 
    }else{ 
    sec--; 
    var timer = setTimeout('countDown(' + sec + ',' + min + ',' + hour + ',' + day + ',"' + elem + '")', 1000); 
} 
+0

谢谢!现在工作! –

+0

不客气 –

0

你需要的时候你已经清除了定时器和输出消息(与return)退出功能秒。

此外,该消息应输出到element而不是elem元素。

最后,定时器值应该保留在函数调用之间,因此使其成为全局的。只要定时器为0,它就可以工作,但是如果有更多定时器,分配的定时器值将为非零值,除非该值保留在函数外,否则将无法清除它。

这工作:

var timer; 
 
    
 
//Not finished -- disregard 
 
function evaluate() { 
 
    var cdate = new Date(); 
 
    var cday = cdate.getDay(); 
 
    var chr = cdate.getHours(); 
 
    var cmin = cdate.getMinutes(); 
 
    var csec = cdate.getSeconds(); 
 
    //Luni 
 
    if (cday === 1) { 
 
    countDown(5, 0, 0, 100, "countdown") 
 
    } 
 
    //Marti sau Miercuri 
 
    if ((cday === 2) || (cday === 3)) { 
 
    countDown(5, 0, 0, 0, "countdown") 
 
    } 
 
    //Joi 
 
    if (cday === 4) { 
 
    countDown(0, 0, 0, 100, "countdown") 
 
    } 
 
    //Vineri sau Sambata 
 
    if ((cday === 5) || (cday === 6)) { 
 
    countDown(5, 0, 0, 0, "countdown") 
 
    } 
 
    //Duminica 
 
    if (cday === 0) { 
 
    countDown(5, 0, 0, 0, "countdown") 
 
    } 
 
} 
 

 
function countDown(sec, min, hour, day, elem) { 
 
    var element = document.getElementById(elem); 
 
    element.innerHTML = "Urmatorul eveniment este in " + day + " zile " + hour + " ore " + min + " minute " + sec + " secunde."; 
 
    //Here is the deadline if 
 
    if ((sec === 0) && (min > 0)) { 
 
    sec = 59; 
 
    min = min - 1; 
 
    } 
 
    if ((sec === 0) && (min === 0) && (hour > 0)) { 
 
    sec = 59; 
 
    min = 59; 
 
    hour = hour - 1; 
 
    } 
 
    if ((sec === 0) && (min === 0) && (hour === 0) && (day > 0)) { 
 
    sec = 59; 
 
    min = 59; 
 
    hour = 23; 
 
    day = day - 1; 
 
    } 
 

 
    if ((min < 0) && (day > 0)) { 
 
    min = 59; 
 
    day = day - 1; 
 
    } 
 
    if ((min < 0) && (day === 0) && (day > 0)) { 
 
    min = 59; 
 
    hour = 23; 
 
    day = day - 1; 
 
    } 
 

 
    if ((hour < 0) && (day > 0)) { 
 
    hour = 23; 
 
    day = day - 1; 
 
    } 
 
    if ((day === 0) && (hour === 0) && (min === 0) && (sec < 0)) { 
 
    clearTimeout(timer); 
 
    element.innerHTML = "Evenimentul este in decurs!"; 
 
    return; 
 
    } 
 
    sec--; 
 
    timer = setTimeout('countDown(' + sec + ',' + min + ',' + hour + ',' + day + ',"' + elem + '")', 1000); 
 
} 
 
evaluate();
<p id="countdown"></p>