Referenz Problem (Countdown)
rushed {Sascha}
- javascript
Hi
ich hab irgendwie das Problem das er die Funktion nur einmal aufruft und dann abbricht und nicht wie gewünscht bis auf 0 runterläuft. Ich denke ich hab einen Syntax fehler drin, aber ich finde ihn nicht.
Wäre nett wenn sich das einer mal anschaut.
[CODE]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
<html>
<head>
<title></title>
</head>
<script type="Text/JavaScript">
<!--
function zaehler(counter,start,id) {
counter=counter-1;
newWidth=(counter)+"px";
document.getElementById(id).style.width = newWidth;
if (counter > 0)
{
// Prüfen, ob fertig
window.setTimeout('zaehler(counter,start,id)', 100)
// wenn nicht wiederaufruf der Funktion
}
else
{
alert(start)
// am ende Ausgabe des Startwertes
}
}
//-->
</script>
<body >
<img onload="zaehler('50','50','graph1')" id="graph1" style="height:5px;width:100px" src="blau.gif" alt="Rückschrittsbalken">
</body>
</html>
[/CODE]----------------------------------------------------------
hi,
window.setTimeout('zaehler(counter,start,id)', 100)
window.setTimeout ruft die Funktion im Kontext von window auf.
Dort existieren aber keine Variablen counter, start und id - die sind nicht global, weil du sie deiner Funktion als Parameter übergibst.
Du müsstest also die _Werte_ der Variablen übergeben, also sie in den String, den du setTimeout als ersten Parameter übergibst, einfügen.
gruß,
wahsaga
Ok und wie macht man sowas? Verstehe es nicht ganz wie ich das nun realisieren soll.
Gruss & Dank im vorraus
hi,
window.setTimeout('zaehler(counter,start,id)', 100)
window.setTimeout ruft die Funktion im Kontext von window auf.
Dort existieren aber keine Variablen counter, start und id - die sind nicht global, weil du sie deiner Funktion als Parameter übergibst.Du müsstest also die _Werte_ der Variablen übergeben, also sie in den String, den du setTimeout als ersten Parameter übergibst, einfügen.
gruß,
wahsaga
window.setTimeout('zaehler(counter,start,id)', 100)
hab ich nun geändert in
window.setTimeout('zaehler(this.counter,this.start,this.id)', 100)
geht aber auch nicht.
Hallo rushed,
window.setTimeout('zaehler(counter,start,id)', 100)
hab ich nun geändert in
window.setTimeout('zaehler(this.counter,this.start,this.id)', 100)
geht aber auch nicht.
wie wahsaga schon schrieb, laufen die per setTimeout aufgerufenen Funktionen im Kontext von window. "this" zeigt also auf window. Deine Variablen sind aber "dem window" nicht bekannt.
Das setTimeout-Problem mit Parametern lässt sich lösen, indem man auf Parameter verzichtet und nur globale Variablen benutzt. Die sind "dem window" bekannt. Diese Lösung ist einfach, aber auch riskant. Globale Variablen könne bei größeren Projekten der Anfang vom Ende sein.
Die Variante, die Wahsage meinte, war, das man sich die Werte merkt, indem man sie in Strings verpackt, also aus counter wird (glaube ich) ""+counter. Diese Variante habe ich nie getestet. Daher bin ich mir hier auch nicht sicher, wie es genau geht. Das Archiv sollte hier aber mehr wissen.
Für mich habe ich mir die schon verlinkte ooP-Variante überlegt.
Gruß, Jürgen
ich hab irgendwie das Problem das er die Funktion nur einmal aufruft und dann abbricht und nicht wie gewünscht bis auf 0 runterläuft. Ich denke ich hab einen Syntax fehler drin, aber ich finde ihn nicht.
Die Fehlerkonsole im Firefox ist leer?
Struppi.