2013-02-26 34 views
0

我有一個頁面,我想顯示多個倒計時。我做了一個JavaScript代碼,使倒計時,它適用於我指定的所有div,但這隻在最後一個div實時進行。有人能幫我嗎?我發佈了下面的頁面。多個定時器Javascript

<html> 
<head> 
<title>Timer</title> 
<head> 
<script type="text/javascript"> 

function Timer(){ 
this.countdown=function(fineanno, finemese, finegiorno, fineore, fineminuti, finesecondi, nomediv) 
{ 
var_div=nomediv; 
var_anno=fineanno; 
var_mese=finemese; 
var_giorno=finegiorno; 
var_ore=fineore; 
var_minuti=fineminuti; 
var_secondi=finesecondi; 
data_scandeza= new Date(var_anno,var_mese-1,var_giorno,var_ore,var_minuti,var_secondi); 
data_oggi= new Date(); 
differenza=(data_scandeza-data_oggi); 
giorni=parseInt(differenza/86400000); 
differenza=differenza-(giorni*86400000); 
ore=parseInt(differenza/3600000); 
differenza=differenza-(ore*3600000); 
minuti=parseInt(differenza/60000); 
differenza=differenza-(minuti*60000); 
secondi=parseInt(differenza/1000); 
differenza=differenza-(secondi*1000); 
if (giorni <= "0" && ore <= "0" && minuti <= "0" && secondi <= "0") 
{ 
document.getElementById(nomediv).innerHTML="Tempo scaduto"; 
} 
else 
{ 
document.getElementById(nomediv).innerHTML=giorni +' giorni '+ore+' ore '+minuti+' min '+secondi+' sec'; 
setTimeout("t"+var_div+".countdown(var_anno, var_mese, var_giorno, var_ore, var_minuti, var_secondi, var_div)",1000); 
} 
} 
} 
</script> 






</head> 
<body> 

<div id="div2"></div> 
<script> 
var tdiv2 = new Timer(); 
tdiv2.countdown("2013","04","26", "23","00","00","div2"); 

</script> 

<div id="div3"></div> 
<script> 
var tdiv3 = new Timer(); 
tdiv3.countdown("2013","04","26", "23","00","00","div3"); 

</script> 
</body> 
</html> 
+0

爲什麼你用'var_'將變量加上前綴? – Bergi 2013-02-26 22:04:26

回答

1

var_divvar_annovar_mesevar_giornovar_orevar_minutivar_secondi是全局變量,因爲你宣佈他們不使用var關鍵字。這意味着您撥打countdown的所有電話都將訪問相同的變量。

請勿在您的setTimeout中使用變量的名稱,否則您將獲得此全局變量的當前值(第二組值)。取而代之的是,使用該變量的值的時候,你建的setTimeout,就像這樣:

setTimeout("t"+var_div+".countdown(" + var_anno + ", " + var_mese + ", " + var_giorno + ", " + var_ore + ", " + var_minuti + ", " + var_secondi + ",'" + var_div + "')",1000); 

其實我沒有看到在所有需要任何這部分:

var_div=nomediv; 
var_anno=fineanno; 
var_mese=finemese; 
var_giorno=finegiorno; 
var_ore=fineore; 
var_minuti=fineminuti; 
var_secondi=finesecondi; 

您可以使用已傳入的參數,而不是使用這些新變量。我想你的原因是setTimeout將有一個變量來讀取值,但通過上面的建議更改,不再需要。