Fabian Mürmann: JS - warum der error ?

HI !

ich habe folgendes JS geschrieben:

function slide()
{

alert   

if (bar.style.color = "white")
  {
   bar.style.color = "blue"
   setTimeout("slide()",1000)
  }
  else
  {
   bar.style.color = "white"
   setTimeout("slide()",1000)
  }

}  

ich habe eien div tag wie folgt:

<div id="bar" style="color: white">text</div>

das JS ändert die farbe nach dem ersten lauf auf blau, dann aber nicht mehr auf weiss. warum ?

Fabian

  1. Hallo Fabian

    function slide()

    »»  {
    »»  
    »»  alert

    if (bar.style.color = "white")
      {
       bar.style.color = "blue"
       setTimeout("slide()",1000)
      }
      else
      {
       bar.style.color = "white"
       setTimeout("slide()",1000)
      }

    »»  
    »»  }

    <div id="bar" style="color: white">text</div>
    das JS ändert die farbe nach dem ersten lauf auf blau, dann aber nicht mehr auf weiss. warum ?

    Das "alert" ist hoffentlich nur hier reingerutscht? Und das einfache "=" in der if-Bedingung?

    Das Problem hatte ich auch schon mal. Ich weiss jetzt nicht mehr genau was es war, aber moeglicherweise ist das "else" in diesem Fall zu unbestimmt. Probier mal:
    if (bar.style.color == "white")
    {
       bar.style.color = "blue";
       setTimeout("slide()",1000);
    }
    if (bar.style.color == "blue")
    {
       bar.style.color = "white";
       setTimeout("slide()",1000);
    }

    viele Gruesse
      Stefan Muenz

    1. Hi !

      Das "alert" ist hoffentlich nur hier reingerutscht? Und das einfache "=" in der if-Bedingung?

      das alert ist ein fehler. ich hab da nur eine ausgabe der aktuellen color gemacht und vergessen es ganz zu löschen.

      ups. naja das mit dem "=" liegt wohl daran, das ich um 2 uhtr nachts nicht mehr klar denken kann ! (da hab ich das script geschrieben)

      Das Problem hatte ich auch schon mal. Ich weiss jetzt nicht mehr genau was es war, aber moeglicherweise ist das "else" in diesem Fall zu unbestimmt. Probier mal:

      mach ich ! danke !

      greets

      - Fabian

      1. HI  again !

        mein skript sieht jetzt so aus :

        function slide()
        {

        if (bar.style.color == "white")
          {
             bar.style.color = "blue";
             setTimeout("slide()",1000);
          }

        if (bar.style.color == "blue")
          {
             bar.style.color = "white";
             setTimeout("slide()",1000);
          }

        }  
        

        schön und gut. die farbe wird einmal geändert, dann wird der browser (ie4) immer lahmer und hängt nach ca. 1 minute. es scheint, als ob sich irgendwie eine rechenintensive schleife gebildete hat. das kann ich mir aber nicht erklären !

        Fabian

        1. Hi!

          schön und gut. die farbe wird einmal geändert, dann wird der browser (ie4) immer lahmer und hängt nach ca. 1 minute. es scheint, als ob sich irgendwie eine rechenintensive schleife gebildete hat. das kann ich mir aber nicht erklären !

          Sehr seltsam...

          Vielleicht hilft ein "clearTimeout(timerID)", beim setTimeout muß dann halt die ID gemerkt werden (timerID=setTimeout(...)). Halte ich aber eher für unwahrscheinlich...

          Wie startest Du denn das Script? Ein erster "setTimeout()"... fehlt mir hier...

          Ciao,
          Mirko

          1. HI !

            ich starte das script im onload des body tags.

            Fabian

            1. HI !

              ich starte das script im onload des body tags.

              Hm... das schließt dann imho wohl einen wiederholten Aufruf aus...
              Schreib' doch mal, wo die Seite zu finden ist. Vielleicht macht's ja wenigstens der 5er Explorer richtig... oder es ist irgendwo anders was faul...

              Apropos: Alle IE5-Freaks sollten mal auf http://www.microsoft.com/windows/Ie/WebAccess/default.ASP schauen... :)

              Ciao,
              Mirko

              1. Hm... das schließt dann imho wohl einen wiederholten Aufruf aus...

                eben !

                Schreib' doch mal, wo die Seite zu finden ist. Vielleicht macht's ja wenigstens der 5er Explorer richtig... oder es ist irgendwo anders was faul...

                noch gibts die page nirgendwo. nur auf meinem pc. da läuft ie4, ie5 und ns 4.5. bei keinem klappts

                Ciau

                Fabian

                1. noch gibts die page nirgendwo. nur auf meinem pc.

                  Mail' sie mir halt mal zu...

                  da läuft ie4, ie5 und ns 4.5. bei keinem klappts

                  Bei Netscape ist das klar (der kennt halt kein DHTML, das den Namen verdient)...

                  Ciao,
                  Mirko

                2. Hier des Rätsels Lösung:

                  Zunächst wurde die Farbe auf weiß gesetzt und ein setTimeout() gemacht.
                  Dadurch wurde die zweite Bedingung erfüllt (umpf... hätte mensch ja auch gleich sehen können... ;)), und die Farbe sofort wieder auf blau gesetzt und noch ein TimeOut gesetzt, obwohl das erste noch nicht eintraf.
                  Das heißt, mit jedem slide()-Aufruf wurden zwei(!) neue erzeugt, was sich dann exponential zur Katastrophe entwickelte... Ein Glück das der IE5.0 besser von der Windows-Shell getrennt ist... :)

                  Also, bitte diese Variante verwenden:
                  function slide()
                  {
                      if (bar.style.color == "white")
                      {
                          bar.style.color = "blue";
                      } else {
                          bar.style.color = "white";
                      }
                      setTimeout("slide()",1000);
                  }

                  Prinzipiell sollte man sich merken: setTimeouts sollte man wenn möglich nur einmal pro Funktion, oder notfalls in einer if-else-Struktur verwenden...

                  Ciao,
                  Mirko

                  1. H I!

                    jo, da hat man den wald vor lauter bäumen ned gesehen !

                    naja was solls !

                    • danke für deine mühe !

                    Fabian

        2. Hallo Fabian

          schön und gut. die farbe wird einmal geändert, dann wird der browser (ie4) immer lahmer und hängt nach ca. 1 minute. es scheint, als ob sich irgendwie eine rechenintensive schleife gebildete hat. das kann ich mir aber nicht erklären !

          Wie reagiert der MSIE4 denn bei <../../tfbaa.htm>? (Netscape ist bei diesem Beispiel zwecklos) Wenn Du dort auf "so wird's gemacht" klickst, findest Du ein Script, das genau Deine Funktionsweise hat.

          viele Gruesse
            Stefan Muenz

          1. HI !

            DANKE !
            das klappt !

            Fabian

          2. HI !

            DANKE !
            das klappt !

            Fabian

  2. function slide()

    »»  {
    »»  
    »»  alert

    if (bar.style.color = "white")
      {
       bar.style.color = "blue"
       setTimeout("slide()",1000)
      }
      else
      {
       bar.style.color = "white"
       setTimeout("slide()",1000)
      }

    »»  
    »»  }
    Hallo Fabian,

    Ich weiss nicht, ob Dein Rechner nur bei COPY & PASTE geschludert hat, oder ob das "alert" tatsaechlich so einsam dasteht.
    Ich hab deswegen extra nochmal unter <../../tecb.htm#a18> nachgeschaut und da steht alert(). Vielleicht ist das schon die Ursache.

    Michael N.

    1. HI !

      mit dem alert das ist mein fehler. der ist schon draussen.

      Fabian