javaS dropdown menu IE anzeigefehler

Von: , Frage gestellt am Fr, 8. Feb 2008

Moin Moin
Ich kenne mich kein Bisschen mit Java-script aus und habe den QC für die Dropdownfunktion kopiert und bearbeitet.
Firefox zeigt alles richtig an, im Gegensatz zum Explorer. Hier sind die Menu-unterpunkte schon sichtbar und der Browser reagiert nicht auf den Onmouseover Befehl. Wäre nett wenn mich Jemand korrigiert oder mir eine bessere Lösung zeigt.

Code(JavaS+css):

<head>
<script type="text/javascript">
<!--
window.onload=montre;
function montre(id) {
var d = document.getElementById(id);
for (var i = 1; i<=10; i++) {
if (document.getElementById('smenu'+i)) {document.getElementById('smenu'+i).style.display='none';}
}
if (d) {d.style.display='block';}
}
//-->
</script>
<style type="text/css">


div#navi {
border-style:outset;
border-color:#999999;
background-color:#aaaaaa;
border-width:0.5em;
width:10em;
margin-bottom:3em;
}


ul#navi {
list-style:none; position:absolute; top:258px; left:170px; z-index:100;
}

ul#navi2 {
list-style:none; position:absolute; top:213px; left:170px; z-index:101;
}
ul#navi3 {
list-style:none; position:absolute; top:400px; left:170px; z-index:102;
}

dt#navi {
cursor:pointer;
}
</style>
</head>
--------------------------------------------------------------------
Code(html):
<body>
<!--1. mouseover--!>
<div id="navi">
<dl>
<dt id="navi" onmouseover="javascript:montre('smenu2');" onmouseout="javascript:montre();"><a id="navi" href="">menupunkt</a></dt>
<dd id="smenu2">
<ul id="navi2" onmouseover="javascript:montre('smenu2');" onmouseout="javascript:montre();">

  • <a href="">unterpunkt1</a>

  • <a href="">unterpunkt2</a>

  • <a href="">unterpunkt3</a>

  • <a href="">unterpunkt4</a>


  • </dd>
    </dl>


    <!--2. mouseover--!>
    <dl>
    <dt id="navi" onmouseover="javascript:montre('smenu1');" onmouseout="javascript:montre();"><a href="">menupunkt</a></dt>
    <dd id="smenu1">
    <ul id="navi" onmouseover="javascript:montre('smenu1');" onmouseout="javascript:montre();">
  • <a href="">unterpunkt1</a>

  • <a href="">unterpunkt2</a>

  • <a href="">unterpunkt3</a>

  • <a href="">unterpunkt4</a>

  • <a href="">unterpunkt5</a>

  • <a href="">unterpunkt6</a>

  • <a href="">unterpunkt7</a>


  • </dd>
    </dl>


    <!--3. mouseover--!>
    <dl>
    <dt id="navi" onmouseover="javascript:montre('smenu3');" onmouseout="javascript:montre();"><a id="navi" href="">menupunkt</a></dt>
    <dd id="smenu3">
    <ul id="navi3" onmouseover="javascript:montre('smenu3');" onmouseout="javascript:montre();">
  • <a href="">unterpunkt1</a>

  • <a href="">unterpunkt2</a>

  • <a href="">unterpunkt3</a>

  • <a href="">unterpunkt4</a>


  • </dd>
    </dl>

    </div>
    </body>


    MFG Alex

    5 Antworten zu dieser Frage

    1. Antwort von nach 19 Stunden 0 hilfreich
      Re: javaS dropdown menu IE anzeigefehler

      Moin,

      ich weiß nicht, ob es daran liegt, aber der erste Fehler steckt gleich in der ersten Zeile:

      window.onload=montre;
      Abgesehen davon, dass die Klammern schon mal fehlen, fehlt auch die ID, die in der nächsten Zeile ja im Funktionskopf definiert ist. Dort steht
      function montre(id)
      , was bedeutet, dass ein Parameter erwartet wird. Anhand dieses Parameters wird vom angegebenen Element der Style auf "Display=Block" gesetzt, was auch immer das bedeutet.

      Die Elemente im Quelltext haben alle irgendwelche IDs (Namen) bekommen. Welcher davon nun gemeint ist, weiß ich nicht. Guck nochmal im Original-Quelltext, ob Du da was findest.

      Abgesehen davon würde ich das "onLoad" nicht in den Script-Bereich schreiben, sondern ins Body-Tag. Beispiel: http://de.selfhtml.org/javascript/sprache/eventhandl...

      Vielleicht reicht das ja schon als Hinweis. Falls nicht, nochmal fragen.

      Kristian

      • Antwort von nach 20 Stunden 0 hilfreich
        Re^2: javaS dropdown menu IE anzeigefehler

        Hallo Kristian, aber der erste Fehler
        steckt gleich in der ersten
        Zeile:

        window.onload=montre;
        Abgesehen
        davon, dass die Klammern schon mal fehlen
        Im Gegenteil: Da haben ja auch keine Klammern zu stehen! Das wäre bei dieser Notation geradezu falsch. fehlt auch die ID,
        die in der nächsten Zeile ja im Funktionskopf definiert ist.
        Dort steht
        function montre(id)
        , was
        bedeutet, dass ein Parameter erwartet wird.
        Parameter können je nachdem auch optional sein und bei Fehlen innerhalb der Funktion mit Defaultwerten belegt werden. Abgesehen davon würde ich das "onLoad" nicht in den
        Script-Bereich schreiben, sondern ins Body-Tag.
        Das ist Geschmackssache. Ich persönlich bevorzuge -so möglich- die strikte Trennung von HTML, CSS und Javascript.

        Auch Eventhandler einzelner Elemente im Dokument kann man dynamisch onload des Windows setzen.

        Gruß Gernot

        • Antwort von nach 20 Stunden 0 hilfreich
          Re^3: javaS dropdown menu IE anzeigefehler

          Im Gegenteil: Da haben ja auch keine Klammern zu stehen! Das
          wäre bei dieser Notation geradezu falsch.
          Okay, stimmt. Parameter können je nachdem auch optional sein und bei Fehlen
          innerhalb der Funktion mit Defaultwerten belegt werden.
          Das ist richtig, aber das passiert nicht, und manche Browser hängen sich an sowas auf und führen weiteren Code nicht mehr aus. Und ich sagte ja, dass ich nicht wüsste, ob es daran liegt ;) Das ist Geschmackssache. Ich persönlich bevorzuge -so möglich-
          die strikte Trennung von HTML, CSS und Javascript.
          Auch Eventhandler einzelner Elemente im Dokument kann man
          dynamisch onload des Windows setzen.
          Prinzipiell richtig. Manchmal ist es aber transparenter, wenn man davon Ausnahmen macht Das onLoad ist so ein Beispiel, finde ich.

          Übrigens habe ich in den vergangenen Jahren auch durch solche "Neben-Diskussionen", die an mir als Fragesteller ein bisschen vorbeigingen, viel gelernt ;)

          Kristian

          • Antwort von nach 21 Stunden 0 hilfreich
            Re^4: javaS dropdown menu IE anzeigefehler

            Hallo Kristian, Parameter können je nachdem auch optional sein und bei Fehlen
            innerhalb der Funktion mit Defaultwerten belegt werden.
            Das ist richtig, aber das passiert nicht,
            Doch in gewisser Weise passiert das hier: id wurde nicht übergeben, Variable d bleibt damit "undefined", was bei einer IF-Abfrage „false“ entspricht, also gibt es auch keinen Versuch, d in seiner Style-Display-Eigenschaft zu verändern:

               var d = document.getElementById(id);
            /*…*/
            if (d) {d.style.display='block';}
            
            Das Ein- und Ausblenden funktioniert ja übrigens auch in meinem IE7 und im Firefox und führt zu keinen Fehlermeldungen. Übrigens habe ich in den vergangenen Jahren auch durch solche
            "Neben-Diskussionen", die an mir als Fragesteller ein bisschen
            vorbeigingen, viel gelernt ;)
            Dito!

            Auf die Gefahr hin, dass diese Off-Topic-Bemerkung gelöscht wird:

            Während Nebendiskussionen beim SELFHTML-Forum oft ausufern, sind mir die Moderatoren in manchen Unterforen von W-W-W ein bisschen gar zu streng.

            Gruß Gernot

    2. Antwort von nach 20 Stunden 0 hilfreich
      Re: javaS dropdown menu IE anzeigefehler

      Hallo Alex,

      ich würde mich an deiner Stelle für solche Zwecke an Vorlagen orientieren, die weitgehend ohne Javascript auskommen und allein für die defekten älteren IEs zusätzlich Javascript einsetzen.

      http://de.selfhtml.org/css/layouts/anzeige/nav_moder...

      Auf- und Zuklappen von (Unter)Menüs, das geht in aller Regel auch ausschließlich mit CSS. Ich kenne mich kein Bisschen mit Java-script aus
      Noch ein Grund mehr, stattdessen auf CSS zu setzen!

      Gruß Gernot

    Keine passende Antwort gefunden? Jetzt eigene Frage stellen!