2016-02-26 28 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>