spires: Java Script funktioniert nur in Firefox

Hallo zusammen,

Ich habe ein Javascript das an einer Stelle auf meiner Page 2 Bilder abhängig von der Uhrzeit rotieren oder auswechseln soll. Also von 3am bis 3pm das soll das eine, von 3pm bis 3am das andere Bild gezeigt werden. Hier ist das Skript:

  
<script language="JavaScript">  
function changeimg()  
day=new Date()  
x=day.getHours()  
if(x>=3 && x<15) {  
   document.write('<img src="www.xxxxx.net/bild1.gif">')  
} else  
if(x>=15 || x<3) {  
   document.write('<img src="www.xxxxx.net/bild2.gif">')  
  
window.setTimeout (changeimg, 5000);  
}  
</script>  

Das wesentliche Problem ist hierbei: Das Skript funktioniert in Firefox einwandfrei, in allen anderen Testbrowsern (Chrome, IE, Opera) garnicht. In FF werden die Bilder angezeigt und zur rechten Zeit getauscht, überall sonst wird nur Leere angezeigt.

Ich benutze das selbe Skript auch für den Hintergrund meiner Page (mit den selben Zeiten), und dieses Funktioniert in allen Broswern! Der einzige Unterschied besteht darin dass vor dem background-script noch die Zeile <body onload = "chgbg()"> steht, und natürlich heißt es dort nicht "img src" sondern "body background".

Also was hindert mich daran dieses Skript in anderen Browsern zum laufen zu bekommen? Und ja, mein Chrome und auch Opera haben Javascript 100% aktiviert, ohne Einschränkungen.

  1. Hallo,

    Also was hindert mich daran dieses Skript in anderen Browsern zum laufen zu bekommen? Und ja, mein Chrome und auch Opera haben Javascript 100% aktiviert, ohne Einschränkungen.

    Also so dürfte es nirgends laufen, schau dir mal die Klammersetzung an.

    vg ichbinich

    --
    Kleiner Tipp:
    Tofu schmeckt am besten, wenn man es kurz vor dem Servieren durch ein saftiges Steak ersetzt...
    1. Also so dürfte es nirgends laufen, schau dir mal die Klammersetzung an.

      Es läuft aber in FF, und das gleiche Skript für die Hintergründe läuft in allen Browsern, wie bereits erwähnt.

      Auch wenn ich die letzte Klammer vor die "Timeout" Zeile verschiebe ändert sich nichts.

      1. Hm Hm Hm

        Also ich habe im Netz ein anderes Skript gefunden das seine Aufgabe in jedem Browser erfüllt. Insofern würde ich mal sagen Problem gelöst (freu).

        Trotzdem würde mich immer noch interessieren warum das erste Skript sich jetzt so merkwürdig verhalten hat. Könnte bestimmt nicht schaden das zu wissen.

        Hier ist das neue, funktionierende Skript.

          
        <script type="text/javascript">  
        var bild = "";  
        var jetzt = new Date();  
        var Std = jetzt.getHours();  
        if (Std >= 3 && Std < 15) {  
          bild = "bild1.gif";  
        } else if (Std >= 15 || Std < 3) {  
          bild = "bild2.gif";  
        }  
        document.write('<img src="http://www.usw.de/' + bild + '" />');  
        </script>  
        
        
      2. Auch wenn ich die letzte Klammer vor die "Timeout" Zeile verschiebe ändert sich nichts.

        Da fehlen noch andere. Nach function ist zum Beispiel keine.
        FF interpretiert das vielleicht noch richtig und andere Browser nicht mehr.

  2. Hallo spires,

    auf die falsche Klammerung wurde ja schon hingewiesen.

    document.write, nach dem Laden der Seite (setTimeout) aufgerufen, überschreibt diese. Ein Wunder, das der FF etwas anzeigt. Steht was in der Fehlerkonsole?

    Verwende statt document.write DOM-Methoden oder ruf die Funktion direkt ohne setTimeout dort auf, wo das Bild hin soll.

    Gruß, Jürgen

  3. Om nah hoo pez nyeetz, spires!

    Ein paar Krümelkackereien, die du aber trotzdem ernst nehmen solltest

    #1# gehören dir die Seiten xxxxx.net oder usw.de? Es gibt für solche Fälle example.com

    #2# ein language-Attribut für das script ist nicht notwendig

    #4# konsequente Einrückungen machen den Code übersichtlicher

    #5# Semikola am Ende einer jeden Zeile sollte man trotzdem setzen

    #6# Die zweite if-Abfrage ist nicht notwendig

    #7# ein document.write schreibt immer eine komplette Seite, sprich: Was vorher angezeigt wurde, sollte dann weg sein.

    #8# Es ist sicher nicht notwendig, alle 5 Sekunden zu überprüfen, ob das Bild gewechselt werden soll.

    Matthias

    --
    Der Unterschied zwischen Java und JavaScript ist größer als der zwischen TeX und Textmarker.

    1. Hallo Matthias,

      #7# ein document.write schreibt immer eine komplette Seite, sprich: Was vorher angezeigt wurde, sollte dann weg sein.

      nicht immer aber im vorliegenden Fall schon.

      Gruß, Jürgen

    2. Om nah hoo pez nyeetz, Matthias Apsel!

      #9# #3# fehlt.

      Matthias

      --
      Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Fan und Fango.