rushed {Sascha}: Referenz Problem (Countdown)

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]----------------------------------------------------------

  1. 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

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. 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

      1. 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.

        1. 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

  2. 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.

    --
    Javascript ist toll (Perl auch!)
  3. Hallo rushed,

    schau mal hier rein: https://forum.selfhtml.org/?t=151078&m=982797.

    Gruß, Jürgen