Verzögerter Download mit Countdown

Fragen und Antworten zur clientseitigen Programmiersprache JavaScript

Verzögerter Download mit Countdown

Beitragvon marco am Fr 7. Mär 2008, 23:20

Hallo,

ich habe vor einen verzögerten Download anzubieten, bei dem der Besucher vor dem Download, der
durch Anklicken eines Formularbuttons angestoßen werden soll, einige Sekunden warten muss.
Der Countdown soll auf einem normalen Formular-Button angezeigt werden und solange der Countdown
noch läuft soll der Button deaktiviert sein. Nach Ablauf des Countdowns soll sich der Button
automatisch aktivieren. Erst jetzt soll der Download per Klick auf den Button gestartet werden
können.

Hab das theoretisch auch schon programmiert aber ich bekomme immer eine Fehlermeldung in der
Javascript-Konsole, die besagt, dass die Variable zaehler nicht definiert ist.
Hier mal der Code:
Code: Alles auswählen
<input id="downbutton" style="width:10em;" type="submit" disabled="true" value="10">
<script type="text/javascript">
counter (10);

function counter (zaehler)
{
   if (zaehler == 0)
   {
      document.getElementById ("downbutton").value = "Download starten"
      document.getElementById ("downbutton").disabled = "";
   }
   else
   {
      document.getElementById ("downbutton").value = zaehler--;
      setTimeout ("counter(zaehler)", 1000);
   }
}
</script>

Der Fehler tritt in der Zeile mit dem setTimeout-Aufruf auf aber die Variable wird (wie man sieht)
ja beim Aufruf der Funktion angegeben. Schnall das nicht! Bin glaube ich schon abgestumpft und
finde des Rätsels Lösung nicht...

Grüße
Marco
marco
 
Beiträge: 12
Registriert: Do 6. Mär 2008, 13:18
Posts

Beitragvon kalle am Sa 8. Mär 2008, 12:51

Hi Marco,

Du hast Recht! Das ist quasi schon fertig... Ist nur ein kleiner Fehler und der liegt tatsächlich
in der angegebenen Zeile. Ersetze mal den setTimeout-Aufruf durch folgenden:
Code: Alles auswählen
setTimeout ("counter("+zaehler+")", 1000);

Damit dürfte das Teil funktionieren... Das Problem bei Deinem Aufruf ist, dass du nicht den Wert
der Variable zaehler angibst. Der Aufruf erwartet einen Zahlenwert, während Du einfach nur einen
nicht definierten Namen angibst (kein String, denn dann müsstest Du ihn in entsprechende Hochkommas
setzen).
kalle
 
Beiträge: 11
Registriert: Do 6. Mär 2008, 13:25
Posts

Beitragvon alm am So 9. Mär 2008, 12:39

Hallo,

ich persönlich verwende für solche Dinge die setInterval-Methode des Window-Objekts. Damit ist das
Problem folgendermaßen in den Griff zu bekommen:
Code: Alles auswählen
<input id="downbutton" style="width:10em;" type="submit" disabled="true" value="10">
<script type="text/javascript">
var timeout = 10;
var int = window.setInterval ("countdown()", 1000);

function countdown () {
   if (timeout <= 1) {
      window.clearInterval (int);
      document.getElementById ("downbutton").value = "Download starten"
      document.getElementById ("downbutton").disabled = "";
   }
   else
      document.getElementById ("downbutton").value = --timeout;
}
</script>

Verwende aber hier eine globale Variable, was nicht jeder gut findet und eher zu Problemen führen
könnte. Wird die Variable beispielsweise an anderer Stelle geändert (z.B. wenn ihr ein sehr hoher Wert
zugewiesen wird), dann kann der Intervall verdamt lange laufen.

Ich finde allerdings, dass man globale Variablen zumindest bei JavaScript durchaus tolerieren kann.
Aber das ist Geschmackssache.

Gruß
Alex
EvoComp.de
Beachten Sie unsere Beispiele zu JavaScript, PHP und Ajax, sowie unser PHP MySQL Tutorial
alm
 
Beiträge: 81
Registriert: Do 21. Feb 2008, 16:22
Posts


Zurück zu JavaScript

cron