Javascript funktioniert
Marius
- javascript
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
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
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.