0

複数のカウントダウンを表示したいページがあります。カウントダウンを行う JavaScript コードを作成し、指定したすべての div で機能しますが、これは最後の div でのみリアルタイムで行われます。誰かが私を助けることができますか?以下のページを掲載しました。

<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>
4

1 に答える 1

1

var_div、、、、、およびグローバル変数は、キーワードvar_annoを使用せずに宣言したためです。これは、すべての呼び出しが同じ変数にアクセスすることを意味します。var_mesevar_giornovar_orevar_minutivar_secondivarcountdown

で変数の名前を使用しないでください。そうしないとsetTimeout、このグローバル変数 (2 番目のセット) の現在の値が取得されます。代わりに、次のように、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、値を読み取るための変数があるためだと思いますが、上記の提案された変更により、必要なくなりました。

于 2013-02-26T22:03:01.530 に答える