apstrakt: Opera 6.04 Rollovereffekt durch className-Wechsel funzt nicht

Hallo!

Ich habe mit Javascript einen Mouseover-Effekter für ein Menu programmiert, so daß beim "Reinfahren" mit der Maus in einen Menupunkt ein Untermenu eingeblendet wird, daß über CSS mit display:none ausgeblendet war. Dieses Ein- und Ausblenden wird dabei via Javascript über dynamisches Umsetzen der Klasse realisiert. Funktioniert super in MSIE und Mozilla/NN6+, leider aber überhaupt nicht in Opera 6.04. Woran liegt das?

Tschau,
apstrakt

PS. Hier noch die entscheidenden Code-Fragmente:

im HTML-Code steht etwa das hier:

<div id="menu1" class="menuLevel1">
  <a href="..." onMouseover="menuEinblenden('menu1x1')">...</a>
  <div id="menu1x1" class="menuLevel2">
     ...
  </div>
  ...
</div>

CSS:

.menuLevel2 {
  display:none;
}

.menuLevel2eingeblendet {
  display:block;
  ...
}

JS:

function menuEinblenden(menuID) {
  var e = document.getElementById(menuID);
  if (e.className.indexOf("eingeblendet")!=-1) return; // da das Untermenu bereits eingeblendet
  e.className += "eingeblendet";
}

  1. Hallo,

    Funktioniert super in MSIE und Mozilla/NN6+, leider aber überhaupt nicht in Opera 6.04. Woran liegt das?

    An der bekannten DOM-Schwaeche von Opera < 7.

    MfG, Thomas

  2. Hi apstrakt,

    [...] Dieses Ein- und Ausblenden wird dabei via Javascript über dynamisches Umsetzen der Klasse realisiert. Funktioniert super in MSIE und Mozilla/NN6+, leider aber überhaupt nicht in Opera 6.04. Woran liegt das?

    Opera 6 kann zwar keine Klassen tauschen, aber den Wert von visibility: ändern.

    LG Roland

    1. Hallo Orlando,

      Opera 6 kann zwar keine Klassen tauschen, aber den Wert von visibility: ändern.

      Ach ja!? Wie denn?

      Auf dem "üblichen" Weg:
         e = document.getElementById("id");
         e.style.visibility = "hidden";
      geht es jedenfalls nicht, auch nicht via
         e.setAttribute("style","visibility:hidden");
      und auch (das abwegige)
         e.visibility="hidden"
      funktioniert nicht.

      *ratlosdenkopfschüttel*

      Ist Opera 7 denn in dieser Hinsicht besser?

      Gruß,
      apstrakt

      1. Hi apstrakt,

        Auf dem "üblichen" Weg:
           e = document.getElementById("id");
           e.style.visibility = "hidden";
        geht es jedenfalls nicht,

        -> document.getElementById("id").style.visibility = "hidden";

        Wahrscheinlich liegt's an der Kürzung mittels "e", denn obige Zeile funktioniert garantiert.

        Ist Opera 7 denn in dieser Hinsicht besser?

        Natürlich. Überzeuge dich selbst:

        http://www.opera.com/download/index.dml?step=3&opsys=Windows&lng=en&platform=Windows

        LG Roland

        1. Hallo!

          Vielen Dank für Eure Hilfe. Da Ihr so hartnäckig insistiert habt, daß es funktioniert, habe ich mühselig den Fehler gesucht.

          Wahrscheinlich liegt's an der Kürzung mittels "e", denn obige Zeile funktioniert garantiert.

          Nee, nee. Das funktioniert so schon. In der Funktion, in der ich das visibility-Setzen durchführe, wird vorher so einiges anderes gemacht, was Opera zum Aussteigen bringt. DAS war also das eigentliche Problem, nicht das e.style.visibility="hidden".

          Nochmal vielen Dank.

          Schöne Grüße,
          apstrakt

      2. Tag auch

        Auf dem "üblichen" Weg:
           e = document.getElementById("id");
           e.style.visibility = "hidden";
        geht es jedenfalls nicht ...

        Doch geht es, man muß es nur richtig machen.

        function wechdamit(layerid)
         {
         document.getElementById(layerid).style.visibility = "hidden";
         }
                                    ^^^ ohne "Gänsefüßchen"!

        und <a href="#" onClick="wechdamit('testdiv')">verschwinde!</a> funktioniert mit Opera völlig problemlos.

        Thomas J.