Der Martin: JavaScript: Problem mit onClick und getElementById

Beitrag lesen

Moin,

Ich habe eine Bildergalerie. Die Bilder werden der Reihe nach angezeigt und nach dem letzten Bild wird wieder von vorne begonnen.

was heißt das? Es gibt noch ein weiteres Script, das die Bilder ohne Nutzer-Interaktion wechselt? Oder was meinst du mit "der Reihe nach angezeigt"?

Soweit passt alles. Nun habe ich aber einen Button für "nächstes Bild" hinzugefügt (onClick).

Tipp: Das Attribut heißt onclick, nicht onClick. HTML ist da allerdings tolerant; XHTML wäre es nicht.

Wenn ich ihn anklicke, wird sehr kurz das nächste Bild angezeigt, dann wird aber wieder Bild 1 angezeigt, obwohl die Anzeigedauer bei 10 Sekunden angegeben wurde.

Beim kritischen Anschauen erkenne ich nicht, was da falsch laufen könnte - außer, dass durch das setTimeout() natürlich auch trotz Klick nach einer gewissen Zeit eine automatische Weiterschaltung erfolgt. Ist das so gewollt? Denn jedes Klicken erzeugt auch eine Timeout-Anforderung, die 10s nach dem Klick bearbeitet wird - dreimal kurz hintereinander klicken bewirkt also drei weitere schnelle Bildwechsel 10s später.

Ich hätte aber ein paar Vorschläge zum "Entmystifizieren". Ich würde in erster Linie das Erhöhen des Zählers und das Prüfen des Grenzwerts (Überlauf) an einer Stelle zusammenziehen, anstatt zwei Ablaufzweige zu bauen, die auf den ersten Blick komplett unterschiedlich aussehen (und der pseudo-rekursive Aufruf macht das Verstehen nicht gerade leichter). Und ich würde zweitens nicht einen String an setTimeout() verfüttern, sondern direkt eine Funktionsreferenz. Dann könnte sich das etwa wie folgt vereinfachen:

    function danachBild()
      {
      xZaehler++;
      if (xZaehler>=xAnzahl_aller_Bilder)
        {
          xZaehler = 0;
        }

      document.getElementById("Foto01").src = ImageArr[xZaehler];
      setTimeout(danachBild, Anzeigedauer);
      }

Ich weiß nicht, ob ich mit diesen Vereinfachungen auch schon den Fehler eliminiert habe, ohne es zu merken. Aber zumindest ist es so leichter zu überblicken.

So long,
 Martin

--
Logik ist die Theorie, Chaos die Praxis.