PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [HTML/CSS/JS] JAVA Countdown will nicht



Hardy
27.05.2010, 16:22
Ich stehe mal wieder auf den Schlauch und bekomme hier wieder was nicht hin :rolleyes:
Ich hätte gerne eine Countdown dafür habe ich folgenden JAVACode verwendet:

<?while($blabla = mysql_fetch_array($blablabla)){
$i++;
unset($new_endcountdown);
$new_endcountdown = ($blabla['endzeit'] - time());
;?><script language='javascript'>

function doCount_<?=$i;?>()
{
var countdown_<?=$i;?> = <?=$new_endcountdown;?>;
var returnvar = '';

if (countdown_<?=$i;?> > 0) {
countdown_<?=$i;?>--
var s = countdown_<?=$i;?>;
var d = Math.floor(s/(24*3600));
var h = Math.floor((s - (d * 24*3600))/3600);
var m = Math.floor((s - (d * 24*3600) - (h * 3600))/60);
var sek = Math.floor(s - (d * 24*3600) - (h * 3600) - (m * 60));

if(d != 0) {
returnvar = returnvar+d+'d ';
}

if(h != 0) {
returnvar = returnvar+h+'h ';
}

if(m != 0) {
returnvar = returnvar+m+'min ';
}

if(sek != 0) {
returnvar = returnvar+sek+'s ';
}
}

else {
returnvar = 'Fertig';
}
document.getElementById('countdown_<?=$i;?>').innerHTML = returnvar;

window.setTimeout('doCount_<?=$i;?>()',1000)
}
</script>
<div id='countdown_<?=$i;?>'></div><?}?>im Quelltext sieht das ganze dann so aus:


<script language='javascript'>

function doCount_1()
{
var countdown_1 = 234;
var returnvar = '';

if (countdown_1 > 0) {
countdown_1--
var s = countdown_1;
var d = Math.floor(s/(24*3600));
var h = Math.floor((s - (d * 24*3600))/3600);
var m = Math.floor((s - (d * 24*3600) - (h * 3600))/60);
var sek = Math.floor(s - (d * 24*3600) - (h * 3600) - (m * 60));

if(d != 0) {
returnvar = returnvar+d+'d ';
}

if(h != 0) {
returnvar = returnvar+h+'h ';
}

if(m != 0) {
returnvar = returnvar+m+'min ';
}

if(sek != 0) {
returnvar = returnvar+sek+'s ';
}
}

else {
returnvar = 'Fertig';
}
document.getElementById('countdown_1').innerHTML = returnvar;

window.setTimeout('doCount_1()',1000)
}
</script>
<div id='countdown_1'></div>
<script language='javascript'>

function doCount_2()
{
var countdown_2 = 66;
var returnvar = '';

if (countdown_2 > 0) {
countdown_2--
var s = countdown_2;
var d = Math.floor(s/(24*3600));
var h = Math.floor((s - (d * 24*3600))/3600);
var m = Math.floor((s - (d * 24*3600) - (h * 3600))/60);
var sek = Math.floor(s - (d * 24*3600) - (h * 3600) - (m * 60));

if(d != 0) {
returnvar = returnvar+d+'d ';
}

if(h != 0) {
returnvar = returnvar+h+'h ';
}

if(m != 0) {
returnvar = returnvar+m+'min ';
}

if(sek != 0) {
returnvar = returnvar+sek+'s ';
}
}

else {
returnvar = 'Fertig';
}
document.getElementById('countdown_2').innerHTML = returnvar;

window.setTimeout('doCount_2()',1000)
}
</script>
<div id='countdown_2'></div>

...usw.
Leider zeigt er mir keinen Countdown an...einer ne Idee woran es liegen kann?

Worka
27.05.2010, 17:38
countdown_<?=$i;?>--

Ändern in:


countdown_<?=$i;?>--;


In der doCount_2 auch.

jpwfour
27.05.2010, 17:46
Java != Javascript, um das anzumerken :wink:

Also zum JS Code:



wird die Funktion do_CountX() irgendwo initial aufgerufen? Im onload= Event bspw., wenn die nicht aufgerufen wird, kanns ja gar nichte rst losgehen
wird sie aufgerufen, wird schon ein Countdown angezeigt, nur dass der bei jedem Aufruf immer mit dem selben Wert rechnet (var countdown_1X=), Daher sieht man keine Veränderung, diese Variable muss ausserhalb der Funktion deklariert werden, dann sollte an sich alles passen.

EDIT: jo @worka, grundsätzlich sollte man am Ende einer Anweisung ein ; setzen, muss man aber nicht, Zeilenumbruch reicht da meist auch, ich bin mir nicht 100% sicher, meine aber das ist sogar offiziell so, also kanns daran wohl nicht liegen.

EDIT2: Kollege hält mir grad Vortrag drüber, dass das tatsächlich weggelassen werden kann laut ECMA-I :wink:

Hardy
27.05.2010, 18:01
wird die Funktion do_CountX() irgendwo initial aufgerufen? Im onload= Event bspw., wenn die nicht aufgerufen wird, kanns ja gar nichte rst losgehen
wird sie aufgerufen, wird schon ein Countdown angezeigt, nur dass der bei jedem Aufruf immer mit dem selben Wert rechnet (var countdown_1X=), Daher sieht man keine Veränderung, diese Variable muss ausserhalb der Funktion deklariert werden, dann sollte an sich alles passen.

Zu 1. Mit onload hatte ich probiert allerdings wird dann nur der 1te Code aus der whileschleife angezeigt, ich editiere nochmal den ersten Post mit bisschen mehr Code.

edit: dachte das es hier dann losgeht:
window.setTimeout('doCount_<?=$i;?>()',1000)

Zu 2.

var countdown_<?=$i;?> = <?=$new_endcountdown;?>;
$new_endcountdown wird dabei in der while schleife erzeugt.
Um den Wert geht es mir auch nicht sondern um den Countdown der nicht startet

jpwfour
27.05.2010, 18:05
hm, funktion sollte aufgerufen werden und die variable ausserhalb der funktion deklariert, und dann gehts, probiers einfach mal aus :wink:

Beim Aufruf muss dem JS das Element bekannt sein mit der ID daher bietet sich onload an.

Variante 1 die gehen sollte:

<div id='countdown_1'></div>
<script language='javascript'>
var countdown_1 = 234;
function doCount_1()
{

var returnvar = '';

if (countdown_1 > 0) {
countdown_1--
var s = countdown_1;
var d = Math.floor(s/(24*3600));
var h = Math.floor((s - (d * 24*3600))/3600);
var m = Math.floor((s - (d * 24*3600) - (h * 3600))/60);
var sek = Math.floor(s - (d * 24*3600) - (h * 3600) - (m * 60));

if(d != 0) {
returnvar = returnvar+d+'d ';
}

if(h != 0) {
returnvar = returnvar+h+'h ';
}

if(m != 0) {
returnvar = returnvar+m+'min ';
}

if(sek != 0) {
returnvar = returnvar+sek+'s ';
}
}

else {
returnvar = 'Fertig';
}
document.getElementById('countdown_1').innerHTML = returnvar;

window.setTimeout('doCount_1()',1000)
}

window.setTimeout('doCount_1()',1000);
</script>
Var2 die auch geht, aber eben immer den selben wert anzeigt:

<div id='countdown_1'></div>
<script language='javascript'>

function doCount_1()
{
var countdown_1 = 234;
var returnvar = '';

if (countdown_1 > 0) {
countdown_1--
var s = countdown_1;
var d = Math.floor(s/(24*3600));
var h = Math.floor((s - (d * 24*3600))/3600);
var m = Math.floor((s - (d * 24*3600) - (h * 3600))/60);
var sek = Math.floor(s - (d * 24*3600) - (h * 3600) - (m * 60));

if(d != 0) {
returnvar = returnvar+d+'d ';
}

if(h != 0) {
returnvar = returnvar+h+'h ';
}

if(m != 0) {
returnvar = returnvar+m+'min ';
}

if(sek != 0) {
returnvar = returnvar+sek+'s ';
}
}

else {
returnvar = 'Fertig';
}
document.getElementById('countdown_1').innerHTML = returnvar;

window.setTimeout('doCount_1()',1000)
}

window.setTimeout('doCount_1()',1000);
</script>

Hardy
27.05.2010, 18:15
komisch Var1 funktioniert obwohl ich mir eigentlich ziemlich sicher bin das ich es mit setTimeout auch so probiert habe :suspicious: oder hat es auch was damit zu tun das du <div id='countdown_1'></div> vor den JavaScript gemacht hast?

Naja jetzt geht es jedenfalls danke.
Kann man auch irgendwie nach returnvar = 'Fertig'; nen db_query einfügen?

jpwfour
27.05.2010, 18:25
Jo wenn es davor ist und dann die Funktion erst 1 Sekunde später aufgerufen wird, dann "findet" Javascript das Element auch meist.

So:

<body onload="doCount_1();doCount_2();">

<script language='javascript'>
var countdown_1 = 234;
function doCount_1()
{

var returnvar = '';

if (countdown_1 > 0) {
countdown_1--
var s = countdown_1;
var d = Math.floor(s/(24*3600));
var h = Math.floor((s - (d * 24*3600))/3600);
var m = Math.floor((s - (d * 24*3600) - (h * 3600))/60);
var sek = Math.floor(s - (d * 24*3600) - (h * 3600) - (m * 60));

if(d != 0) {
returnvar = returnvar+d+'d ';
}

if(h != 0) {
returnvar = returnvar+h+'h ';
}

if(m != 0) {
returnvar = returnvar+m+'min ';
}

if(sek != 0) {
returnvar = returnvar+sek+'s ';
}
}

else {
returnvar = 'Fertig';
}
document.getElementById('countdown_1').innerHTML = returnvar;

window.setTimeout('doCount_1()',1000)
}

function doCount_2()
{
alert(11);
}


</script>
<div id='countdown_1'></div>
</body>

sollte es aber auch funktionieren.