countdown problem!

Twistor

Grünschnabel
Nabend Zusammen

Also ich habe folgendes Problem, ich hab mir nen Countdown geschrieben. (sicherlich nicht der beste, aber bin auch noch nicht so lange in Javascript drinne) Naja aufjedenfall will ich nun das wenn der countdown auf 0 is das er mir nen link anzeigt, doch das macht er nicht, was mach ich bloß falsch? also hier mal mein code, wäre sehr dankbar über paar vorschläge!
PHP:
<div id="time"></div>	
<script type = "text/javascript">

	var a = window.document.getElementById('time');
	var b = window.document.getElementById('time');

var sek = <?php echo "$count"; ?>;
var c=60;
var d=24;

var  min = Math.floor(sek/c); 
  sek1 = sek % c;

var  std = Math.floor(min/c);
  min = min % c;

setInterval('time()',1000);

function time() {

if(sek1 == 0 && min == 0 && std == 0) {
		a.innerHTML ='<a href="<?php echo "Gebauude.php?$s_name=$s_id" ?>" >Countdown abgeschlossen</a>';

	} else {

	sek--
		sek1--

if(sek1 <= 0 && min <= 0) {
       min = 60;
       sek = 59;
               std = (std-1);
	}
if(sek1 < 0 && min > 0) {
	 min = (min-1);
	 sek1=59;
	} 

timeString = std + ":" + min + ":" + sek1;
		  b.innerHTML=timeString;
	}
}
 
Zuletzt bearbeitet:
Ach du Schande, bei welchem Fehler soll ich denn anfangen.
Erstmal stehen die Elemente in einem html-Dokument in einer bestimmten Reihenfolge, die vom Browser beim Laden von oben bis unten abgearbeitet wird. Das hat zur Folge, dass das Script-Tag noch vor dem div mit der id="time" geladen wird. Es existiert also kein Element mit der id="time" zur Zeit als du schon per getElementById drauf zugreifst. Benutzte ein onload für deine Zusweisung von a und b und vor allem für den Aufruf der Funktion, denn du kannst nicht sicher sein, dass deine ganze Seite in einer Sekunde geladen ist.
Der Sinn der Variablen b entzieht sich mir sowieso vollständig. Die hat nämlich stets den gleichen Wert wie a, aber egal.

In deiner if-Anweisung ist außerdem ein gravierender Fehler. So wie er jetzt ist, läuft dein Countdown einfach mit negativen Zahlen weiter, weil die Bedingung dass std = min = sek1 = 0 sein soll nie erfüllt ist.

Die Inkrementierung von sek und sek1 sollte nach der Ausgabe stattfinden, weil sonst die erste Sekunde verschluckt wird.

Und Performance-Mäßig wäre es auch gut, wenn das Intervall beendet wird, sobald der Link angezeigt wird, weil das sonst in manchen Borwsern zu einer nervigen sekundlichen Aktualisierung und damit zu einem leichten ruckeln des Links führt.

Der neue Code sieht dann so aus:
Javascript:
window.onload = function() {
    a = window.document.getElementById('time');
    time();
}

var sek=60, c=60, d=24, a;

var  min = Math.floor(sek/c);
sek1 = sek % c;

var  std = Math.floor(min/c);
min = min % c;

function time() {
    if( std==0 && min==0 && sek==0 ) {
        a.innerHTML = '<a href="<?php echo "Gebauude.php?$s_name=$s_id" ?>" >Countdown abgeschlossen</a>';
    } else {
        if(sek1 <= 0 && min <= 0) {
            min = 60;
            sek = 59;
            std -= 1;
        }
        if(sek1 < 0 && min > 0) {
            min -= 1;
            sek1=59;
        }
        a.innerHTML = std + ':' + min + ':' + sek1;
        setTimeout('time()',1000);
        sek--;
        sek1--;
    }
}
 
Danke für die Hilfe, aber ich auch mit deinem code immer noch das selbe Problem das mir der Link einfach nicht angezeigt wird! Was mach ich nur falsch
 
Also mein Code funktioniert ganz sicher. Lad dir mal den Anhang runter und überzeuge dich selbst. Habe ihn im Mozilla und im IE getestet. Wenn dann hast du irgentwo einen schließenden Tag oder sowas vergessen oder dein php-Code gibt etwas falsches aus.
 

Anhänge

  • blubb.zip
    557 Bytes · Aufrufe: 32
Zurück