2013-02-26 1 views
0

여러 카운트 다운을 보여줄 페이지가 있습니다. 나는 카운트 다운을 만드는 자바 스크립트 코드를 만들었고 그것은 내가 지정한 모든 div에서 작동하지만 이것은 마지막 div에서만 실시간으로 진행된다. 누군가 나를 도울 수 있습니까? 나는 아래 페이지를 게시했다. 당신이 var 키워드를 사용하지 않고 그것들을 선언하기 때문에여러 타이머 자바 스크립트

<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

답변

1

var_div, var_anno, var_mese, var_giorno, var_ore, var_minutivar_secondi는 글로벌 변수입니다. 즉, countdown에 대한 모든 통화가 동일한 변수에 액세스하게됩니다.

setTimeout에서 변수의 이름을 사용하지 마십시오. 그렇지 않으면이 전역 변수의 현재 값 (두 번째 세트)이 나타납니다.

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

: 나는 전혀이 부분에 대한 필요성을하지 않는

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

을 실제로 대신,이처럼의 setTimeout을 만들 때 변수의 를 사용 이러한 새로운 변수를 사용하는 대신 전달 된 매개 변수를 사용할 수 있습니다. 내가 가진 이유는 setTimeout이 값을 읽을 수있는 변수를 가지므로 위의 제안 된 변경 사항이 더 이상 필요하지 않습니다 .