setTimeout wird nicht ausgeführt

Shrek

Mitglied
Hi Leute ,

mein Problem ist das bei meinem Script die setTimeout Funktion nicht funktioniert. Ich will einen Countdown programmieren bei dem ich die Zeit die Ablaufen soll aus dem eigentlichem HTML-Script bekomme. Also Absolut Variable. Ich weiß nicht ob ich sie falsch geschrieben habe oder nicht. Die Funktion soll sich nach ablauf einer Sekunde wieder selbst aufrufen. Dies geschieht jedoch nicht. Wenn ich die Seite lade habe ich sofort meinen Abspann dort stehen. Außer wenn ich z.B. eine alert("test") vor der Funktion platziere . Dann bekomme ich für jede Sekunde des Programms eine Ausgabe welche jedoch alle zeitlich direkt hintereinander ( obwohl ich erst nach einer Sekunde eine Ausgabe bekommen dürfte) sind. Ich hoffe ihr könnt mir helfen.

Die HTML-Datei beinhaltet:

PHP:
<html>

<head>
  <title></title>
<script type="text/javascript" src="decision.js"></script>
</head>

<body OnLoad="start()">

<div id="time">61</div>
</body>

</html>

Die importierte Javascriptdatei heißt decision.js und beinhaltet:



PHP:
function start()
{
	var time = document.getElementById( 'time' ).innerHTML;
    timer( time );
}

function timer(time)
{
        var h = Math.floor( time / 3600 );
	var m = Math.floor( ( time - h * 3600 ) / 60 );
	var s = time - h * 3600 - m * 60;
    //Stunden
    if ( h >= 10 )
    {

    }
	else if( h == 0)
    {
    	h += "0";
    }
    else
    {
    	h = "0" + h;
    }
    //Minuten
    if ( m >= 10 )
    {

    }
	else if( m == 0)
    {
    	m += "0";
    }
    else
    {
    	m = "0" + m;
    }
    //Sekunden
    if ( s >= 10 )
    {

    }
	else if( s == 0)
    {
    	s += "0";
    }
    else
    {
    	s = "0" + s;
    }
    //fertig
    if ( m == 0 && h == 0 && s == 0)
    {
        document.getElementById( 'time' ).innerHTML= "abgeschlossen";
        setTimeout( reload(), 5000 );
    }
    else
    {
        document.getElementById( 'time' ).innerHTML = h + ":" + m + ":" + s;
        time = time - 1;
    	document.setTimeout(timer(time),1000);
    }
}
 
Drei kleine Fehler:

1) Eine Variable ist nur dann wirklich global, wenn sie ausserhalb einer Funktion
deklariert wurde.
Es muss also nicht
PHP:
function start()
{
    var time = window.document.getElementById("time");
    [...]
}
heißen, sondern:
PHP:
var time;
function start()
{
    time = window.document.getElementById("time");
    [...]
}
Desweitern solltest du Strings nicht einfach in Zahlen-Variablen speichern.
Ein einfaches parseInt sorgt schon für wesentlich besseren Stil:
PHP:
function start()
{
    time = parseInt( window.document.getElementByid("time") );
    [...]
}

2) Der erste Parameter von setTimeout muss ein String sein:
PHP:
setTimeout( "timer( " + time + " )", 1000 );

3) setTimeout ist eine Methode von window, nicht von document.
PHP:
//falsch:
document.setTimeout( "timer( " + time + " )", 1000 ); 

//richitg:
window.setTimeout( "timer( " + time + " )", 1000 );

hth
 

Neue Beiträge

Zurück