Samuel B. Weber: div's ein- und ausblenden

Ich hab hier mal was gemacht was eigentlich gehn sollte!
ps: lass ich die else-befehle in der for-schleife aus funktionierts! aber das ja nicht den gewünschten effekt.

hier mal der code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
 <title>Untitled</title>
 <script language="JavaScript">
 var d = document;
 var menues = new Array("menue01", "menue02", "menue03");
 function showMenue(divName) {
   if(d.all) {
     for(var i = 0; i < menues.length; i++) {
    if(divName == menues[i]) {
      d.all[divName].style.visibility = "visible";
    } else {
      d.all[divName].style.visibility = "hidden";
    }
  }
   } else if((!d.all) && (d.getElementById)) {
     for(var i = 0; i < menues.length; i++) {
    if(divName == menues[i]) {
      d.getElementByid(divName).style.visibility = "visible";
    } else {
      d.getElementByid(divName).style.visibility = "hidden";
    }
  }
   } else if(d.layers) {
     for(var i = 0; i < menues.length; i++) {
    if(divName == menues[i]) {
      d.layers[divName].visibility = "show";
    } else {
      d.layers[divName].visibility = "hide";
    }
  }
   }
 }
 </script>
</head>

<body>
<a href="#" onclick="showMenue('menue01');">menue01</a>  <a href="#" onclick="showMenue('menue02');">menue02</a>  <a href="#" onclick="showMenue('menue03');">menue03</a>
<div id="menue01" style="position:absolute; top:100px; left:10px; height:50px; width:100px; background-Color:#CCCCCC; visibility:hidden;">
menue01
</div>
<div id="menue02" style="position:absolute; top:100px; left:115px; height:50px; width:100px; background-Color:#CCCCCC; visibility:hidden;">
menue02
</div>
<div id="menue03" style="position:absolute; top:100px; left:220px; height:50px; width:100px; background-Color:#CCCCCC; visibility:hidden;">
menue03
</div>
</body>
</html>

das ziel soll sein mit einer funktion und einem click das richtige layer einzublenden und die anderen auszublenden

sollte doch gehn oda nicht?

thX im voraus

  1. Hallo,

    Sofern ich mich erinnern kann, wird die Eigenschaft visibility nur von Netscape unterstützt, nicht aber von IE. Hier musst Du display verwenden:

    d.all[divName].style.display = 'none';

    d.all[divName].style.display = 'visible';

    Gruß, Pawel
    http://www.pkworld.de

    1. Moin!

      Sofern ich mich erinnern kann, wird die Eigenschaft visibility nur von Netscape unterstützt, nicht aber von IE. Hier musst Du display verwenden:

      Stimmt nicht, IE kann genausogut die visibility verändern. Da Opera am geladenen Dokument aber die Display-Eigenschaft nicht dynamisch ändern kann, ist visibility genau die richtige Eigenschaft.

      - Sven Rautenberg

  2. Du sprichst in den for-Schleifen immer die angeklickte Diversion an:

    d.all[divName].style.visibility

    es müsste aber heißen:

    d.all[menues[i]].style.visibility

    um alle Diversions durchzulaufen

    Viel Spaß Sven

  3. Moinsen.

    Das Posting unter mir bitte ignorieren.

    Fehler Nr1: Es muss getElementById(divName) und nicht getElementByid(divName) heissen.

    Fehler Nr2: Deine for-Schleife ist ein bisschen unglücklich auf gebaut. Bei jedem Schleifen durchlauf wird geprüft, ob der angegebene Name identich mit einem Element aus einem Array ist. So weit ist es ok. Allerdings läuft die Schleife weiter wenn bereits eine Bedingung erfüllt wurde. Das heist, wenn der Name mit dem ersten Arrayelement übereinstimmt und der Layer angezeigt wird, läuft die Schleife weiter und prüft ob der Name mit dem zweiten Element identisch ist. Da er das nicht ist, wird der else-Teil deiner if-Anweisung ausgeführt und das erste Element wieder auf nichtsichtbar gesetzt. Somit hast du den Eindruck das nix funktioniert.

    Anmerkung:

    Für den IE würd iich folgende Bedingungen Prüfen:
    IE < 5: document.all && !document.getElementById
    IE >= 5 (Mozilla, KOnqueror etc.): document.getElementById

    Gruß Herbalizer

    1. Moinsen.

      Das Posting unter mir bitte ignorieren.

      -- Scherzkeks am Werk, vielleicht aktualisierst Du das nächstemal erst mal das Forum dann merkst Du auch das die sinnlose Antwort 2 Zeilen unter Dir steht und nicht direkt unter Dir

      1. Moinsen.

        -- Scherzkeks am Werk, vielleicht aktualisierst Du das nächstemal erst mal das Forum dann merkst Du auch das die sinnlose Antwort 2 Zeilen unter Dir steht und nicht direkt unter Dir

        Selber Scherzkeks. Zwar bist du mir tatsächlich dazwischen gerutscht, aber bevor du was postest solltest du vielleicht deine Lösung erstmal ausprobieren und dann feststellen das sie nicht geht, weil sie auf genau dem selben Prinzip basiert.

        Gruß Herbalizer

        1. Selber Scherzkeks. Zwar bist du mir tatsächlich dazwischen gerutscht, aber bevor du was postest solltest du vielleicht deine Lösung erstmal ausprobieren und dann feststellen das sie nicht geht, weil sie auf genau dem selben Prinzip basiert.

          ähm... funktioniert hervorragend abgesehen von dem ById das hab ich übersehen.

          Ich hoffe Du bist nicht beleidigt

          Ciao Sven

          1. Ups funktioniert tatsächlich. Ich hab vorhins beim Test 'ne Kleinigkeit bei mir übersehen.
            Schande über mich :)

            Naja, schönen Tag noch

            Herbalizer

    2. Lösung: Ich benutze der Einfachheit halber nur Zahlen! Bitte genu hingucken beim Funktionsaufruf! Ausserdem hab ichs nur für Mozilla gemacht, sollte aber analog für den Rest sein.

      var d = document;
       var menues = new Array("menue01", "menue02", "menue03");
       function showMenue(divNr) {
        if((!d.all) && (d.getElementById)) {
          for(var i = 0; i < menues.length; i++) {
            if( i != divNr ) {
              d.getElementById(menues[i]).style.visibility = "hidden";
            } else if( i == divNr ) {
              d.getElementById(menues[i]).style.visibility = "visible";
            }
          }
        }
       }

      HTML:

      <a href="#" onclick="showMenue(0);">menue01</a>  <a href="#" onclick="showMenue(1);">menue02</a>  <a href="#" onclick="showMenue(2);">menue03</a>

      Gruß Herbalizer