2011-01-26 83 views
0
<div><div id="movingbar"></div></div> 

var i; 
function startTime(i) 
{ 
    if (i < 100) 
    { 
     document.getElementById("movingbar").style.width = i + "%"; 
     t = setTimeout('startTime(i++)', 1000); 
    } else return; 
} 

這應該會產生類似進度條的東西。但是該函數只執行一次。什麼是錯O_o遞歸不應該結束,直到是100!!!在FireBug和IE上沒有錯誤。進度條的Js代碼,不工作

+0

所有很好的答案,但你也想這樣做如果我<= 100,否則你永遠不會完全填充進度條。 – 2011-01-26 13:53:33

回答

2

因爲你傳遞一個字符串,超時將被評估你實際上告訴它來運行代碼「開始時間(我)」,我在,它的運行時間是不確定的代碼。你希望它運行的是什麼「開始時間(2)」,「開始時間(3)」等

這應該爲你工作:

t = setTimeout('startTime(' + ++i + ')', 1000); 
1

這工作:

<div style="height: 20px;"><div id="movingbar" style="height: 20px;background: #000;"></div></div> 

window.onload=function(){var i=1; 
startTime(i); 
} 

    function startTime(i) 
{ 
    if (i < 100) 
    { 
     document.getElementById("movingbar").style.width = i + "%"; 
     i++; 
     t = setTimeout('startTime('+i+')', 1000); 
    } else return; 
} 

這裏試試:http://jsfiddle.net/pHxSy/

+1

沒有指定的塊元素(如div)總是消耗100%的寬度 - 所以我不認爲這是問題。 – oezi 2011-01-26 13:41:19

1

你傳遞字符串文字i++給你的函數。嘗試使用匿名函數。

function startTime(i) 
{ 
    if (i < 100) 
    { 
     document.getElementById("movingbar").style.width = i + "%"; 
     i++; 
     t = setTimeout(function() { startTime(i); }, 1000); 
    } else return; 
}