Michael Hein: dauerhaft ablaufende Javascript-Function

Hi @ll,

ich brauche eure Hilfe!

Innerhalb eines Frames soll ständig ein "Zitat" angezeigt werden und alle Minute soll das Zitat ausgewechselt werden.

<BODY>

... weitere DIV ID="z.B. kontakt"...

<DIV ID="zitat" STYLE="position:absolute; top:67px; left:65px; visibility:visible">
 <FONT SIZE="2" FACE="AGarmond" COLOR="#ffffff">Das wohlüberlegte Treffen von Entscheidungen folgt einer alten Tradition:<BR>Zuerst raten und dann die anderen dafür verantwortlich machen.<BR>
 - Scott Adams, Schöpfer von <B>Dilbert</B></FONT>
</DIV>

<DIV ID="zitat" STYLE="position:absolute; top:67px; left:65px; visibility:hidden">
 <FONT SIZE="2" FACE="AGarmond" COLOR="#ffffff">Wer uns vor nutzlosen Wegen warnt, leistet uns einen ebenso<BR> guten Dienst, wie derjenige, der uns den rechten Weg anzeigt.<BR>
 - Heinrich Heine, (1797 - 1856), dt Dichter</FONT>
</DIV>
<DIV ID="zitat" STYLE="position:absolute; top:67px; left:65px; visibility:hidden">
 <FONT SIZE="2" FACE="AGarmond" COLOR="#ffffff">Ein Experte ist ein Mann, der hinterher genau sagen kann,<BR>warum seine Prognose nicht gestimmt hat.<BR>
 - Winston CHurchill, britischer Politiker</FONT>
</DIV>

... weitere DIV ID="zitat" insgesamt 13 ....

<SCRIPT LANGUAGE="JavaScript">
<!--
var obj = document.getElementById('zitat');

function showZitat()
{
 for (i = 0; i < 13; i++)
 {
  if (obj[i].style.visibility == "visible") // welches Zitat war sichtbar ?
  {
   obj[i].style.visibility = "hidden"; // sichtbares Zitat unsichtbar machen
   i++;     // nächstes Zitat
   obj[i].style.visibility = "visible"; // Zitat sichtbar machen
  }
 }
}
onLoad = window.setTimeout("showZitat()", 60000);
//-->
</SCRIPT>
</BODY>

Leider erscheint nur die Fehlermeldung das obj.style kein Object oder null ist.

Warum?

MfG

Michael Hein

  1. Tach,

    Leider erscheint nur die Fehlermeldung das obj.style kein Object oder null ist.

    Warum?

    Da Ids eindeutig sein müssen, ergibt auch getElementById natürlich kein Collection.

    mfg
    Woodfighter

    1. Hallo Woodfighter,

      vielen Dank für eine schnelle Antwort.

      Da Ids eindeutig sein müssen, ergibt auch getElementById natürlich kein Collection.

      heißt das jetzt, das ich nur eine DIV ID="zitat" haben kann, und diese dann mit innerText ändern muss.

      MfG

      Michael Hein

      1. Tach,

        heißt das jetzt, das ich nur eine DIV ID="zitat" haben kann, und diese dann mit innerText ändern muss.

        nein, aber das wäre eine der denkbaren Lösungen.

        mfg
        Woodfighter

        1. Hallo,

          nein, aber das wäre eine der denkbaren Lösungen.

          und welche wären die anderen, kannst du etwas konkreter werden.

          MfG

          Michael Hein

      2. Hallo!

        Da Ids eindeutig sein müssen, ergibt auch getElementById natürlich kein Collection.

        heißt das jetzt, das ich nur eine DIV ID="zitat" haben kann, und diese dann mit innerText ändern muss.

        Nein. Das heißt, dass jedes Div eine eindeutige ID habem muss. Kannst ja die Divs durchnummerieren.

        mfg
          frafu

        1. Hallo,

          Nein. Das heißt, dass jedes Div eine eindeutige ID habem muss. Kannst ja die Divs durchnummerieren.

          Will ich aber nicht, da sonst die Schleife ja nicht funktioniert!

          Andere Lösung ?

          MfG

          Michael Hein

          1. Hallo,

            Nein. Das heißt, dass jedes Div eine eindeutige ID habem muss. Kannst ja die Divs durchnummerieren.

            Will ich aber nicht, da sonst die Schleife ja nicht funktioniert!

            Andere Lösung ?

            verwende namen oder klassen (name oder class-attribut).

            cu, w0lf.

            1. Hallo,

              verwende namen oder klassen (name oder class-attribut).

              Habe ich gemacht, Verwende zusätzlich zur ID NAME="Zitat" über alle ID's

              Leider funktioniert das Script immer noch nicht !

              <SCRIPT LANGUAGE="JavaScript">
              <!--
              var obj = document.getElementsByName('Zitat');

              function showZitat()
              {
               for (i = 0; i < 13; i++)
               {
                if (obj[i].style.visibility == "visible") // welches Zitat war sichtbar ?
                {
                 obj[i].style.visibility = "hidden"; // sichtbares Zitat unsichtbar machen
                 i++;     // nächstes Zitat
                 obj[i].style.visibility = "visible"; // Zitat sichtbar machen
                }
               }
               setTimeout("showZitat()", 10000);
              }
              onLoad = setTimeout("showZitat()", 10000);
              //-->
              </SCRIPT>

              Gruß, Michael

          2. Hallo!

            Will ich aber nicht, da sonst die Schleife ja nicht funktioniert!

            Dann passe halt die Schleife an.

            mfg
              frafu

  2. Hallo Michael Hein,

    das IDs eindeutig sind, wurde Dir ja schon gesagt. Vieleicht geht folgende Konstruktion:

    <div id=<zitate">
     <div>Zitat 1/<div>
     <div>Zitat 2/<div>
     <div>Zitat 3/<div>
       .....
    </div>

    und beim Zugriff über

    var Zitat=documnet.getElementById("Zitate").document.getElementsByTagName("div") ;

    so erhältst Du eine Kollektion aller Zitate und kannst mit Zitat[i] auf jedes einzelne zugreifen.

    Gruß, Jürgen

    1. var Zitat=documnet.getElementById("Zitate").document.getElementsByTagName("div") ;

      ^
                   document

      Antrag an die DEVs: Javascript-Befehle, DOM-Objekte und -Methoden gehören in die Rechtschreibkontrolle! :)

      Gruß, Jürgen

      1. Hallo Jürgen,

        gestern musste ich erstmal segeln gehen um den Kopf wieder frei zu kriegen. Daher erst heute meine Antwort.

        var Zitat=documnet.getElementById("Zitate").document.getElementsByTagName("div");

        das war genau der richtige Ansatz. Interesanterweise enthält die Collektion "Zitat" jedoch 22 Elemente anstatt der zu erwartenden 15.
        Warum dies so ist ist mir noch nicht klar.

        Habe mir erstmal damit geholfen das ich meine Schleifenvariable erst mit 7 beginnen lasse. Das ist zwar nicht sehr professionel läßt mich aber erstmal weiterarbeiten.

        mit Gruß vom Michael

        1. var Zitat=documnet.getElementById("Zitate").document.getElementsByTagName("div");

          das war genau der richtige Ansatz. Interesanterweise enthält die Collektion "Zitat" jedoch 22 Elemente anstatt der zu erwartenden 15.
          Warum dies so ist ist mir noch nicht klar.

          Na, lass sie dir doch mal anzeigen, dann dürftest du doch sehen ob es das ist was du erwartest:

          for(var i = 0; i < Zitat.length; i+)
          {
          alert( Zitat[i].innerHTML);
          }

          Struppi.

          --
          Javascript ist toll (Perl auch!)
        2. Hallo Michael Hein,

          var Zitat=documnet.getElementById("Zitate").document.getElementsByTagName("div");

          da ist noch ein Fehler von mir drin: das zweite document ist zu viel. Du suchst ja DIVs im Element mit der ID "Zitate" im Dokument. Ich glaube, mein falscher Vorschlag liefert alle DIVs im document.

          Gruß, Jürgen

          1. Hallo Jürgen,

            Alles läuft einwandfrei. Vielen Dank.

            Der Thread ist jetzt geschlossen.

            An @ll,

            Grüße vom Michael