Frank11: Übergebenes Objekt an Funktionen weitergeben

Hallo Leute,

ich habe ein Problem mit der Übergabe von Objekten an Funktionen:

Ich rufe im HTML-Code die Funktion onmousover="request(this)" auf und möchte nun das Objekt weitergeben an eine weitere Funktion:
var dertimer;
var timer;
function request(id)
{
        timer=0;
        countdown(id);
}
function countdown(id)
{
        if(timer==10)
        {
                show(id); //Aktion , hier würde das Problem wohl auch auftreten
                timer=0;
        }
        else
        {
                timer++;
                dertimer=setTimeout("countdown(id)",50); <--Line 129
        }
}
Allerdings verstehe ich nicht, wo dort der Fehler liegt bekomme von Firebug eine Fehlermeldung die sagt:
id is not defined
Line 129

Hat jemand eine Idee woran das liegt?

Grüße
Frank

  1. Hi,

    lies mal den Punkt "Beachten Sie:" unter http://de.selfhtml.org/javascript/objekte/window.htm#set_timeout.
    Abhilfe sollte Folgendes schaffen:

      
    dertimer = setTimeout(function() {countdown(id);},50);  
    
    

    LG Karin

  2. Hi!

    dertimer=setTimeout("countdown(" + id + ")",50);

    --
    Trau Dich!
     
  3. Hallo,

    show(id); //Aktion , hier würde das Problem wohl auch auftreten

    Nein, würde es nicht!

    dertimer=setTimeout("countdown(id)",50); <--Line 129

    id is not defined

    Noch die Erklärung, warum das nicht funktioniert:
    Wenn du Code verzögert mit setTimeout aufrufst, wird dieser im globalen Geltungsbereich ausgeführt. id ist hier aber eine lokale Funktionsvariable und auf die hat eine fremde Funktion selbstverständlich keinen Zugriff - wohl aber die Funktion selbst.

    Der Tipp von Karin zielt darauf hinaus, eine Closure zu erzeugen, in der die Variable id eingeschlossen wird, damit sie der verzögert aufgerufenen Funktion weiterhin zur Verfügung steht.

    Mathias