dr.Colossos: onclick layer öffnen/schließen

Beitrag lesen

Hi,

versuch das mal (siehe unten).

Sorry, hab deine Anfrage nur ueberflogen, daher das Missverstaendnis.

Entscheidend is die Schleife, und dass du verstehst was da passiert ...

while(elem.parentNode != null)
   {
    elem = elem.parentNode;
    if(elem.id != null && elem.id == "menu")
     return;
   }

Es wird vom geklickten Element mittels parentNode immer zu dessen Vater gesprungen. Kommt man auf dem Pfad am table-Element vorbei, dann spring aus der Funktion mit return (d.h. es wird nix gemacht!).

Wird die Scheife ganz durchgelaufen (hier bis zum document-Objekt, wleches kein Parent hat), dann wird die letzte Zeile noch ausgefuehrt, da das "return" nie ausgefueht wird -> verstecken.

Hope this helps

Kann man sicher noch besser machen, aber das is ein funktionierendes (?) Bsp.

<body>
  <a href="#" id="menulink" onMouseUp="showmenu(event)">
   Link 1
 </a>
 <table id="menu" class="menu">
  <tr>
   <td valign="middle">
    Sequenz:
   </td>
   <td valign="middle">
    <input type="text" style="font-size:9px; width:25px; height:10px;" maxlength="4">
   </td>
   <td>
    <a href="http://www.selfhtml.org">
     OK
    </a>
   </td>
  </tr>
 </table>

<script language="javascript" type="text/javascript">
  document.onmousedown = hidemenu;

function showmenu(event){
   //event = event || window.event; // unnoetig solang event nicht benutzt wird
   //elem = event.target || event.srcElement; // unnoetig solang event nicht benutzt wird
   document.getElementById("menu").style.display = "block";
  }

function hidemenu(event)
  {
   event = event || window.event;
   elem = event.target || event.srcElement;
   while(elem.parentNode != null)
   {
    elem = elem.parentNode;
    if(elem.id != null && elem.id == "menu")
     return;
   }
   document.getElementById("menu").style.display = 'none';
  }
 </script>
</body>