Michael Krax: Mozilla hide/unhide workaround

Hallo,

ein Bug in Mozilla hat mich einige Nerven gekostet - hier ein kleiner Workaround für Leidensgenossen:

Versucht man ein Objekt über style.display='none' zu verstecken bzw. mit display='inline' wieder zu zeigen verhält sich der Mozilla teilweise unberechenbar (offensichtlich wegen Timing Problemen der Rendering Engine). Ganz schlimm wird es, wenn man ein Objekt über nextSibling anspricht. Der Schlüssel ist, im ersten Sibling kein A Tag zu verwenden.

Hier etwas Demo Code um den Bug zu verdeutlichen:

<div onClick="this.nextSibling.style.display='inline';">show (working)</div><div style="display:none;">me<img src="http://www.mozilla.org/images/mozilla-banner.gif"></div>

<br><br>

<div onClick="this.nextSibling.style.display='inline';"><a href="">show (bug test 1, works when working sample used before)</a></div><div style="display:none;">me<img src="http://www.mozilla.org/images/mozilla-banner.gif"></div>

<br><br>

<div onClick="this.nextSibling.style.display='inline';"><a href="javascript:void(0);">show (bug test 2)</a></div><div style="display:none;">me<img src="http://www.mozilla.org/images/mozilla-banner.gif"></div>

Viele Grüße,
Michael

  1. hi

    <div onClick="this.nextSibling.style.display='inline';"><a href="">show (bug test 1, works when working sample used before)</a></div><div style="display:none;">me<img src="http://www.mozilla.org/images/mozilla-banner.gif"></div>

    Das kann nicht funktionieren. Das leere <a href=""> verursacht einen Reload der aktuellen Datei.

    Grüße aus Bleckede

    Kai

    1. Hi Kai,

      wow - auch um diese Zeit noch wach?

      Hast recht, da fehlt ein #, also <a href="#">. Das ist drin um das Timing Problem zu verdeutlichen. Manchmal klappt es, machmal nicht. Hängt vom Cache und der Grösse der Datei ab. Kann ich auch nur auf einem meiner Rechner reproduzieren.

      Meistens geht es, die Rendering Engine hat aber einen offensichtlichen "Hänger", d.h. man sieht einen Bilder Platzhalter für etwa eine halbe Sekunde selbst wenn das Bild im Cache ist. Warum die Engine erst Bilder nachlädt wenn sie wirklich angezeigt werden ist mir nicht verständlich. Mag ein gutes Feature sein unter manchen Gesichtspunkten, bei vielen DHTML Anwendungen stört das aber.

      Viele Grüße,
      Michael

      1. hi

        Hast recht, da fehlt ein #, also <a href="#">. Das ist drin um das Timing Problem zu verdeutlichen. Manchmal klappt es, machmal nicht. Hängt vom Cache und der Grösse der Datei ab. Kann ich auch nur auf einem meiner Rechner reproduzieren.

        bewirkt einen Sprung zum Anfang der Seite - auch hier ist also ein Reload nicht ausgeschlossen.

        Schreib _gar kein_ href="" rein, oder - um Netscape 4 glücklich zu machen - return false; an's ende des JS-Aufrufes.

        Grüße aus Bleckede

        Kai