Marius: Javascript funktioniert

Hallo,
ich habe folgende Funktion geschrieben:

<script type="text/javascript">
function zoom(top, left, width, height) {

var e = document.getElementById("zoomit");

top -= 1;
 e.style.top = top;
 left -= 1;
 e.style.left = left;
 width += 2;
 e.style.width = width;
 height += 2;
 e.style.height = height;

setTimeout( "zoom(top, left, width, height)", 100);
}

</script>

welche mit onclick gestartet wird.
Wenn ich draufklicke vergrößert sich auch der DIV (id = zoomit).
Jedoch wird die Funktion nicht mehrmals ausgeführt. Woran liegt das?
Ich habe doch mit setTimeout bestimmt, dass die Funktion gleich wieder gestartet werden soll.

Mfg Marius

  1. Hallo,

    e.style.top = top;
    e.style.left = left;
    e.style.width = width;
    e.style.height = height;

    Die Einheit "px" fehlt hier. Die ist wichtig, sonst ignorieren standardkonforme Browser diese Zuweisungen.

    Wenn ich draufklicke vergrößert sich auch der DIV (id = zoomit).
    Jedoch wird die Funktion nicht mehrmals ausgeführt.

    Sie wird versucht auszuführen, aber dabei gibt es vermutlich einen JavaScript-Fehler. Schau mal in der JavaScript-Konsole vom Firefox.

    Woran liegt das?

    Beim ersten Aufruf werden die Variablen top, left, width, height als lokale Variablen im Geltungsbereich der Funktion angelegt.

    Der Code-String, den du setTimeout übergibst, wird aber im globalen Geltungsbereich ausgeführt, und da gibt es keine derartigen Variablen.

    Eine mögliche Umsetzung sind Closures:

    window.setTimeout(function () {  
       zoom(top, left, width, height);  
    }, 100);
    

    Hier erzeugst du eine anonyme Funktion, die Zugriff auf die lokalen Variablen des zoom-Funktionsaufrufes hat - auch nachdem der Aufruf abgearbeitet wurde.

    Mathias

    1. window.setTimeout(function () {

      zoom(top, left, width, height);
      }, 100);

        
      Das Code-Highlighting zeigt, dass man besser nicht »top« als Variablenwert verwenden sollte - der ist nämlich als globale Variable vordefiniert und verweist auf das oberste Fensterobjekt; man kann ihn zwar in einem Funktion überschreiben, aber das empfiehlt sich nicht.