2010-01-12 65 views
0

我目前是JavaScript的初學者,主要是Java代碼。 我的問題是關於定期調用document.write("string here")(每1/2秒)將任何新的未打印聊天消息追加到客戶端。我早先嚐試使用下面的代碼:如何在JavaScript中爲聊天應用程序產生時間延遲?

<html> 
<body onload="yantra();"> 
<script type="text/javascript"> 
x = 0; 

function yantra(){ 
document.write("Hello<br>"); 
i = 1; 
    for(i = 0; i < 100; i++){ 
    setTimeout("writeOneNum()", 1000); 
    } 

} 

function writeOneNum(){ 
x =x + 1; 
document.write(x+"<br>"); 
} 
function blank(){} 
</script> 

</body> 
</html> 

而不是它每1000毫秒打印1到100,因爲我預計它打印;實際上,它一次打印1到100(意思是沒有任何延遲)。

回答

1

那麼,你正在設置所有的超時時間,所以它當然會立即啓動它們。您的代碼將與小的修改工作,以循環:

function yantra(){ 
    document.write("Hello<br>"); 
    i = 1; 
    for(i = 0; i < 100; i++){ 
     setTimeout("writeOneNum()", 1000 * i); 
    } 
} 

通過乘以i的時候,首先是在1000 * 1 = 1000毫秒發射瞬間,第二,第三個爲1000 * 2 = 2000 MS等

在你情況下,它可能是明智的考慮setInterval功能:

function yantra(){ 
    document.write("Hello<br>"); 
    setInterval("writeOneNum()", 1000); 
} 

這將觸發writeOneNum()每秒無限。要在某個時間點停止時間間隔,請查看上面同一鏈接上的clearInterval。

+0

所以,你說JavaScript與Java代碼相比有輕微的轉折?我得到的是,在某種程度上(在JavaScript中),與Java相比,(理論級別)的所有語句都是同時執行的,它們按順序執行。那麼,我是否正確? – Catfish 2010-01-12 11:39:13

+1

for循環本身將在不到一毫秒的時間內執行,並且在這一毫秒內,您將命令'在1000毫秒內執行此功能'100次。 setTimeout不會暫停for循環的執行,它會立即繼續循環。除非您使用某種睡眠功能,否則這應該在所有語言中都相似。 – 2010-01-12 12:06:37