# setTimeout wird nicht ausgeführt



## Shrek (9. Januar 2004)

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:


```
<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:




```
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);
    }
}
```


----------



## Fabian H (9. Januar 2004)

Drei kleine Fehler:

1) Eine Variable ist nur dann wirklich global, wenn sie ausserhalb einer Funktion 
deklariert wurde.
Es muss also nicht

```
function start()
{
    var time = window.document.getElementById("time");
    [...]
}
```
heißen, sondern:

```
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:

```
function start()
{
    time = parseInt( window.document.getElementByid("time") );
    [...]
}
```

2) Der erste Parameter von _setTimeout_ muss ein String sein:

```
setTimeout( "timer( " + time + " )", 1000 );
```

3) _setTimeout_ ist eine Methode von _window_, nicht von _document_.

```
//falsch:
document.setTimeout( "timer( " + time + " )", 1000 ); 

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

hth


----------



## Shrek (10. Januar 2004)

Danke

jetzt funktioniert alles.


----------

