Matthias: Bei "onmouseout" bleibt Navigation aufgeklappt

Hallo Leute. Ich hab mir eine Navigation per Klappmenü erstellt, wie es im Buch "DHTML" von Franzis' beschrieben wird. Allerdings stört mich daran, dass das Menü aufgeklappt bleibt, wenn die Maus den Bereich wieder verlassen hat. Kann mir bitte jemand sagen, was ich ändern muss? Ich habe den hoffentlich relevanten Code unten mit in den Text genommen. Wäre super, wenn mir dabei jemand helfen kann.

function Menue_erzeugen() {
 var j = 0;
 for(var i = 0; i < Menue.length; i += 3) {
  MenueDivs[j] = document.createElement("div");
  MenueDivs[j].style.position = "absolute";
  MenueDivs[j].style.fontFamily = MenueText;
  MenueDivs[j].style.fontSize = MenueTextgroesse;
  MenueDivs[j].style.color = MenueTextfarbe;
  MenueDivs[j].style.fontWeight = MenueTextgewicht;
  MenueDivs[j].style.backgroundColor = MenueHintergrundfarbe;
  MenueDivs[j].style.padding = MenueInnenabstand;
  MenueDivs[j].style.zIndex = "2";
  if(Menue[i] == "top") {
   MenueDivs[j].innerHTML = "<a class="nav" href=""+ Menue[i+2] + "" onMouseover="MouseoverTopMenue(" + j + ")" onMouseout="MouseoutTopMenue(" + j + ")">" + Menue[i+1] + "</a>";
   Untenversatz = 0;
   if(i > 0) Rechtsversatz += TopBreite;
   MenueDivs[j].style.top = TopStartOben + "px";
   MenueDivs[j].style.left = TopStartLinks + Rechtsversatz + "px";
   MenueDivs[j].style.width = TopBreite + "px";
   MenueDivs[j].style.height = TopHoehe + "px";
   Untenversatz += TopHoehe;
  }
  else if(Menue[i] == "down") {
   MenueDivs[j].innerHTML = "<a class="nav" href=""+ Menue[i+2] + "" onMouseover="MouseoverDownMenue(" + j + ")" onMouseout="MouseoutDownMenue(" + j + ")">" + Menue[i+1] + "</a>";
   MenueDivs[j].style.top = TopStartOben + Untenversatz + "px";
   MenueDivs[j].style.left = TopStartLinks + Rechtsversatz + "px";
   MenueDivs[j].style.width = DownBreite + "px";
   MenueDivs[j].style.height = DownHoehe + "px";
   MenueDivs[j].style.paddingLeft = DownLinksrand + "px";
   MenueDivs[j].style.visibility = "hidden";
   Untenversatz += DownHoehe;
  }
  document.getElementsByTagName("body")[0].appendChild(MenueDivs[j]);
  j += 1;
 }
}

function MouseoverTopMenue(n) {
  MenueDivs[n].style.backgroundColor = MouseoverHintergrundfarbe;
  Menue_zuruecksetzen();
  for(var i = 0; i < Menue.length; i += 3)
   if(Menue[i] == "down")
    if(parseInt(MenueDivs[parseInt(i/3)].style.left) == parseInt(MenueDivs[n].style.left))
     MenueDivs[parseInt(i/3)].style.visibility = "visible";
}

function MouseoutTopMenue(n) {
  MenueDivs[n].style.backgroundColor = MenueHintergrundfarbe;
}

function MouseoverDownMenue(n) {
  MenueDivs[n].style.backgroundColor = MouseoverHintergrundfarbe;
}

function MouseoutDownMenue(n) {
  MenueDivs[n].style.backgroundColor = MenueHintergrundfarbe;
}

function Menue_zuruecksetzen() {
  for(var i = 0; i < Menue.length; i += 3)
   if(Menue[i] == "down")
    MenueDivs[parseInt(i/3)].style.visibility = "hidden";
}

  1. Führ doch einfach bei onmouseout die Funktion Menue_zuruecksetzen aus.
    Elessar

    1. Danke für die promte Antwort. Auf diese Lösung bin ich schon auch gekommen, aber ich weiß nicht, wo ich das reinschreiben soll. Am liebsten wäre mir, mir beschreibt jemand ganz genau, wie ich dazu vorgehen muss. Tausend Dank im Voraus!

    2. Führ doch einfach bei onmouseout die Funktion Menue_zuruecksetzen aus.

      Hallo,

      das wird so einfach nicht gehen. Wenn ich das richtig sehe, ist das Menü so aufgebaut, das sich die Hauptmenüpunkte bei MouseOver öffnen und erst schließen, wenn ein anderer Hauptmenüpunkt mit der Maus überfahren wird. Setzt Du die Schließfunktion bei MouseOut des Hauptmenüpunktes ein, dann kannst Du keinen Untermenüpunkt mehr öffnen, weil das Menü sich schon zugeklappt hat, bevor Du diesen erreichst. Selbiges gilt bei MouseOut in den Untermenüpunkten. Das Script müsste also völlig neu aufgebaut werden.

      Allerding muss man auch das Fahrrad nicht immer wieder neu erfinden:
      http://javascript.cooldev.com/scripts/coolmenu/

      viele Grüße

      Axel