2014-03-07 158 views
0

我是javascript的新手。我正在檢查數據庫中的一段時間,並顯示期間結束時剩餘的時間。Javascript setInterval函數不停止

我得到的時間值與strtotime作爲變量$lefttime在PHP中。我的問題是與JavaScript部分,所以我不寫的PHP代碼。

所以我的JavaScript代碼:

var s = <?php echo $lefttime; ?>; //s stands for seconds 
var d = Math.floor(s/60);   //d stands for minutes 
s -= d*60; 

var count = setInterval(functime, 1000); 
    function functime() { 
     s--; 

     if(s < 0) { 
      d--; 
      s = 59;     
      var san = s; 
      var dak = "0" + d; 
     } 
     else if(d < 0) { 
       clearInterval(functime); 
       document.getElementById('id').innerHTML = "over"; 
      } 
     else if(d < 10){ 
      var dak = "0" + d; 
      if(s < 10) { 
         var san = "0" + s; 
        } 
      else { 
         var san = s; 
        } 
     } 
     else if(s < 10){ 
      var san = "0" + s; 
      if(d < 10) { 
         var dak = "0" + d; 
        } 
      else { 
         var dak = d; 
        } 
     } 
     else { 
      var san = s; 
      var dak = d; 
     } 

     document.getElementById('id').innerHTML = dak+":"+san; 
    } 

創建daksan變量來檢查,如果該值是一個數字,如果這樣加0他們的左側。

所以它工作完美,除了停止時d < 0。它倒數至00:00,然後顯示 0-1:59,然後顯示undefined:undefined

請幫幫我我找不到什麼是錯的。

回答

3

的setInterval返回一個標識符間隔

var myInterval = setInterval(functime, 1000); 

而且它應作爲參數傳遞給clearInterval

clearInterval(myInterval); 

更新這個數字標識符:你的代碼是太多太複雜。你有太多嵌套的if/else,所以它使理解變得複雜。您應該創建幾個簡單的函數來隔離具有特定職責的小塊代碼。舉例:

var s = <?php echo $lefttime; ?>; //s stands for seconds 
var d = Math.floor(s/60);   //d stands for minutes 
s -= d * 60; 

update(d, s); 
if(d >= 0) { 
    var myInterval = setInterval(functime, 1000); 
} 
else { 
    finish(); 
} 

function functime() { 
    s--; 
    if(s < 0) { 
     d--; 
     if (d < 0) { 
      clearInterval(myInterval); 
      finish(); 
      return; 
     } 
     else { 
      s = 59; 
     } 
    } 
    update(d, s); 
} 

function format(value) { 
    if(value < 10) { 
     return '0' + value; 
    } 
    return value; 
} 

function update(d, s) { 
    var san = format(s); 
    var dak = format(d); 
    document.getElementById('id').innerHTML = dak + ":" + san; 
} 

function finish() { 
    document.getElementById('id').innerHTML = "over"; 
} 
+0

試過了。但仍然有相同的問題 – ctarimli

+0

您的代碼中可能存在另一個問題。但我向你保證你的代碼在這個特定的點上是錯誤的。 –

+0

是的,你是對的,謝謝你。 – ctarimli