2014-01-29 280 views
0

我在javascript中用for循環做了一個簡單的定時器,但是當點擊按鈕調用函數test()時,整個頁面凍結了,所以我假設我有一個無限循環 這是我的代碼:javascript for循環進入無限循環

<html> 
<head> 
<script> 
    function test() { 
    var HowLong = 5; 
    for (var i=0;i<HowLong;i--) { 
     document.write(HowLong[i] + "<br>"); 
    } 
    } 
</script> 
</head> 
<body> 
    <input type="button" onclick="test()" value="Start Timer"> 
</body> 
</html> 
+1

簡單的邏輯,在環我永遠> HowLong突破的條件,所以無限循環。 –

+0

有幾個問題:a)是的,你有一個無限循環,因爲你不計數。 b)'HowLong'是一個數字,但是你想用它作爲一個對象('HowLong [i]')。你可能只想使用'i'。 c)即使你解決了這個問題,你也不會看到每次迭代的變化。循環的執行非常迅速,只能看到最後一次迭代的變化。我建議閱讀關於JavaScript中基本數據類型的教程:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Values,_variables,_and_literals –

+1

@ user3247345:我有一種奇怪的感覺,你完全錯誤的背後邏輯實施倒計時計時器.. –

回答

0

試試這個;

for (var i=0;i<HowLong;i++) { 
    document.write(i + "<br>"); 
} 
+2

有什麼區別? –

+0

它不再滯後,只是打印'未定義'的次數,因爲HowLong是 – user3247345

+0

@ user3247345:因爲您正在嘗試訪問**數字**的屬性「0」,「1」,「2」等('HowLong [I]')。數字沒有這樣的屬性,數組通常是這樣做的。 –

3

是的,你有循環的無限循環的問題:

for (var i=0;i<HowLong;i--) 

而不是i--嘗試i++

for (var i=0;i<HowLong;i++) 

一件事HowLong不是一個數組所以你不能使用HowLong[i],只需簡單使用:

document.write(i+ "<br>"); 

由於@jfriend00已在註釋中提及當您在加載文檔後使用document.write()時,它將清除當前文檔並啓動一個新文檔。在你的情況下,你的按鈕Start Timer將被清除。如果你想避免它,你可以使用div併爲其增加值。

<html> 
    <head> 
    <script> 
    function test() { 
     var HowLong = 5; 
     for(var i=0;i<HowLong;i++) { 
     document.getElementById("myDiv").innerHTML += i + "<br>"; 
     } 
    } 
    </script> 
    </head> 
    <body> 
    <input type="button" onclick="test()" value="Start Timer"> 
    <div id="myDiv"></div> 
    </body> 
</html> 
+1

還有另一個問題。在文檔加載後使用'document.write()'時,它將清除當前文檔並啓動一個新文檔。 – jfriend00

+0

@ jfriend00感謝您的提示,我已經更新了我的答案。 – Bhushan

0
<html> 
<head> 
<script> 
    var HowLong = 5; 
    var isRun = false; 

    function mf(i){ 
    document.getElementById('myAnchor').innerHTML = i; 
    } 
    function rt(i) 
    { 
     setTimeout(function(){ 
      mf(i++); 
      if(i!=HowLong+1)rt(i); 
      else isRun = false; 
     }, 1000); // 1000ms = 1sec 
    } 
    function test() { 
    var i = 1; 
    if(!isRun) 
    { 
     isRun = true; 
     rt(i); 
    } 
    } 
</script> 
</head> 
<body> 
<div id="myAnchor"></div> 
    <input type="button" onclick="test()" value="Start Timer"> 
</body> 
</html> 

你忘了你的循環增加延遲