Robert: Funktion funktioniert mit FF nur bei Mouseover/Mouseout-Aufruf

Hallo,

folgender Code:

  
w={y:null}  
  
function showMe(id)  
{  
if(w.y!=null){w.y.style.display="none";}  
w.y=document.getElementById(id);  
if(w.y!=null){w.y.style.display="block";}  
}  

Wenn ich die Funtion im Code mit showMe(1) aufrufe, dann passiert in Firefox (Version 2.0.0.11) nichts (obwohl id = 1 ist, bleibt w.y = null). Bei den anderen Browsern (Opera 9.25, IE 6.0) funktioniert dies aber einwandfrei. Erst wenn ich die Funktion mittels ... onMouseOut="showMe(1);" ... aufrufe, funktioniert sie auch in Firefox.

Ich stehe vor einem Rätsel. Ist das ein Bug von Firefox oder habe ich irgendeinen Fehler im Code?

  1. Hallo,

    Ich stehe vor einem Rätsel. Ist das ein Bug von Firefox oder habe ich irgendeinen Fehler im Code?

    valide Ids beginnen mit einem Buchstaben. du scheinst einem Element die id="1" gegeben zu haben

    Gruß plan_B

    --
         *®*´¯`·.¸¸.·
    1. Hallo,

      valide Ids beginnen mit einem Buchstaben. du scheinst einem Element die id="1" gegeben zu haben

      Leider liegt es nicht daran. Ich habe gerade die Eins durch durch ein Wort ersetzt, das beschriebene Verhalten von Firefox bleibt aber. Wirklich sehr merkwürdig.

      1. Hallo,

        ohne den zugehörigen HTML-Code weiss ich auch keine bessere Erklärung. Überprüfe doch mal deine Seite mit dem Validator.

        wie deine Funktion genau funktionieren soll, ist mir auch nicht klar. Wahrscheinlich werden die mouse-Events in einer anderen Reihenfolge gefeuert, als du annimmst.

        Ein Schnipsel HTML wäre hilfreich ...

        Gruß plan_B

        --
             *®*´¯`·.¸¸.·
        1. Hallo,

          Ein Schnipsel HTML wäre hilfreich ...

          HTML:
          ---

            
          <span id="1">Anzuzeigender Text</span>  
            
          <a href="javascript:goTo(link)" onMouseOver="showMe(1)" onMouseOut="showMe(w.f)"  
          
          ~~~---  
            
          JavaScript:  
          \---  
          ~~~javascript
            
          w.f=1;  
            
          w={y:null,f:null}  
          function showMe(id)  
          {  
          if(w.y!=null){w.y.style.display="none";}  
          w.y=document.getElementById(id);  
          if(w.y!=null){w.y.style.display="block";}  
          }  
            
          showMe(w.f)  
          
          ~~~---  
            
          Wie gesagt, beim Aufruf über MouseOver-/MouseOut funktioniert alles wie es soll. Nur wenn ich `showMe(w.f)`{:.language-javascript} aufrufe, passiert in FF nichts. (Ich kann auch `showMe(1)`{:.language-javascript} aufrufen, der Effekt bleibt gleich - es passiert nichts.)
          
          1. Hallo,

            es ist wenig sinnvoll, mit invalidem HTML javascript zu testen.

            JavaScript:

            w.f=1;

            diese Anweisung dürfte nicht erkannt werden, komischerweise meldet nur Opera hier einen Fehler

            w={y:null,f:null}

              
            statt dessen:  
            ~~~javascript
              
             w={y:null,f:'span1'};  
            
            
              
            
            > function showMe(id)  
            > { ... }  
            >   
            > showMe(w.f)  
            
            

            geht auch im FF ( span hat display:block )
            wenn zu diesem Zeitpunkt schon ein Element mit der entsprechenden id existiert, also der HTML-block vor dem Scriptblock geladen wurde.

            wahrscheinlich habe ich aber deine Konstruktion nicht durchschaut ..

            Gruß plan_B

            --
                 *®*´¯`·.¸¸.·
            1. Hallo,

              es ist wenig sinnvoll, mit invalidem HTML javascript zu testen.

              Sorry, aber eigentlich gibt es bei keinen richtigen HTML-Code. Die Seiten werden alle dynamisch per Java-Script erzeugt (mit document.writeln() ).

              Scheinbar ist es bei Firefox so, dass erst die komplette HTML-Seite komplett geschrieben sein muss, damit der Befehl [code lang =javascript]w.f=document.getElementById(id);[/code] greift. Und mit geschrieben meine ich, dass die Ausführung von JavaScript beendet sein muss. Es bringt nämlich auch nichts, wenn ich den Befehl [code lang =javascript]showMe(w.f)[/code] als allerletztes Ausführen lasse.

              Interessanterweise kann ich dies mit [code lang =javascript]window.setTimeout("showMe(w.f)",0);[/code] umgehen, da der Timeout-Befehl scheinbar erst dann ausgeführt wird, nachdem der komplette HTML-Code geschrieben wurde. Ich vermute dies, weil ich den Timeout-Befehl auch in die allererste Zeile von JavaScript schreiben kann. Obwohl zu diesem Zeitpunkt noch gar kein HTML-Code vorhanden ist, wird [code lang =javascript]showMe(w.f)[/code] korrekt ausgeführt.

              wahrscheinlich habe ich aber deine Konstruktion nicht durchschaut ..

              Die Konstruktion ist ein Hover-Effekt für Links. Je nachdem über welchen Link man die Maus bewegt, wird ein Text in einer separaten Tabelle angeigt. Wird ein Link angeklickt, bleibt der dazugehörige Text permanent dort stehen. Fährt man dann mit der Maus wieder über einen Link, wird der permanente Text ausgeblendet und ein anderer Text eingeblendet. Verlässt die Maus den Link wieder, verschwindet der Text und der permanente Text wird wieder angezeigt.