2011-05-15 55 views
1

我一直在此工作了很長一段時間。我正在嘗試創建一個倒計時的簡單計時器。我已經使alert()工作,但不幸的是textToChange不會改變。我已經在下面複製了我的代碼的副本。任何幫助將不勝感激!謝謝。如何使用setInterval()更改文本?

<script type="text/javascript"> 
    var timeLeft = 0; 
    var changingTextElement; 
    var changingText = new Array(); 
    var ctr = 0; 

    function timeMsg(thing) 
    { 
    var length = thing.inputbox.value*1000; 
    var t = setTimeout("alertMsg()",length); 
    timeLeft = length/1000; 
    initChangeText(); 
    } 

    function alertMsg() 
    { 
    alert("Alert!"); 
    } 

    function initChangeText(){ 
     changingTextElement = document.getElementById("textToChange"); 
     changingText[ctr] = changingTextElement.innerHTML; 
     ctr++; 
     while(timeLeft > 0){ 
      changingText[ctr] = timeLeft; 
      timeLeft--; 
      ctr++; 
     } 
     ctr = 0;  
     setInterval("changingText()",1000); 
    } 

    function changingText() { 
     ctr++; 
     if(ctr >= changingText.length){ 
      changingTextElement.innerHTML = 0; 
     } 
     else{ 
      changingTextElement.innerHTML = changingText[ctr]; 
     } 
    } 

</script> 
+0

你也可以發表您的HTML,所以我們可以驗證的ID,元素等? – WSkid 2011-05-15 08:28:14

+0

沒有理由創建'changingText'數組(它可能會變得很大)。您可以計算出正確的值以便即時顯示... – 2011-05-15 08:31:44

+0

@Thomas:不,changeTextElement在全局範圍內定義在腳本塊的頂部。如果添加'var',它將無法以任何方式工作。 – 2011-05-15 08:32:28

回答

3

您使用的是changingText功能和changingText陣列...

見衝突?


隨着更多的信息,

不要在setInterval方法使用字符串作爲名稱的功能。直接使用該方法的參考

setInterval(changingText, 1000); 
+0

花了太長的時間才弄清楚這一點。多麼浪費小提琴:( – mplungjan 2011-05-15 08:45:53

1

對於簡單的倒數計時器,此代碼太大。基本上,你應該做的是:

  • 組來自應倒計時
  • 開始使用setInterval其遞減計數器,並顯示

這可以是一個計時器秒數簡單如:

var countFrom; 
var timer; 
function run_timer() { 
    document.getElementById("textToChange").innerHTML = --countFrom; 
    // !0 evaluates to true, if the counter reaches 0 (wait 0 seconds) ... 
    if (!countFrom) { 
     clearInterval(timer); 
     alert("Timer finished!"); 
    } 
} 
function init_timer() { 
    // stop previous timers if any 
    clearInterval(timer); 
    // start counting from 30 seconds 
    countFrom = 30; 
    timer = setInterval(run_timer, 1000); 
}