2012-12-05 23 views
0

我使用代码从这样的回答:https://stackoverflow.com/a/6501353/494901倒计时时间耗尽时不会返回。

基本上当计时器结束时,我希望它返回true,以我的功能,例如,当它已经结束了,我可以做的东西一切都结束了之后。但脚本从不返回,它结束,但它永远不会返回到它所调用的方法。

function countdown(elementName, minutes, seconds) 
{ 
    var element, endTime, hours, mins, msLeft, time; 

    function twoDigits(n) 
    { 
     return (n <= 9 ? "0" + n : n); 
    } 

    function updateTimer() 
    { 
     msLeft = endTime - (+new Date); 
     if (msLeft < 1000) { 
      return true; 
     } else { 
      time = new Date(msLeft); 
      hours = time.getUTCHours(); 
      mins = time.getUTCMinutes(); 
      element.innerHTML = (hours ? hours + ':' + twoDigits(mins) : mins) + 
       ':' + twoDigits(time.getUTCSeconds()); 
      setTimeout(updateTimer, time.getUTCMilliseconds() + 500); 
     } 
    } 

    element = document.getElementById(elementName); 
    endTime = (+new Date) + 1000 * (60*minutes + seconds) + 500; 
    return updateTimer(); 
} 
+0

究竟是在调用此方法? – trebuchet

+0

它是异步的!你永远无法从未来的计算中返回一个值。您只需设置计时器以便稍后执行某些操作,并立即从'countdown'函数返回 - 更好的名称是“initCountdown” – Bergi

回答

2

传递一个回调函数这样:

countdown("element-id",0,5, function() { alert('done!'); }); 

function countdown(elementName, minutes, seconds, callback) 
{ 
    var element, endTime, hours, mins, msLeft, time; 

    function twoDigits(n) 
    { 
     return (n <= 9 ? "0" + n : n); 
    } 

    function updateTimer() 
    { 
     msLeft = endTime - (+new Date); 
     if (msLeft < 1000) { 
      callback(); 
     } else { 
      time = new Date(msLeft); 
      hours = time.getUTCHours(); 
      mins = time.getUTCMinutes(); 
      element.innerHTML = (hours ? hours + ':' + twoDigits(mins) : mins) + 
       ':' + twoDigits(time.getUTCSeconds()); 
      setTimeout(updateTimer, time.getUTCMilliseconds() + 500); 
     } 
    } 

    element = document.getElementById(elementName); 
    endTime = (+new Date) + 1000 * (60*minutes + seconds) + 500; 
    return updateTimer(); 
}