Jonas: Menüscript anpassen

Hallo zusammen,
da ich mich nicht auskenne mit Javascript, habe ich diesen von http://de.selfhtml.org/css/layouts/navigationsleisten.htm#modern: Unterpunkt Javascript. Hab ihn mir soweit angepasst, dass es bei mir funktioniert. Jetzt habe ich aber ein neues Projekt für das ich zwei Navis habe. Somit bräuchte ich auch den Script zwei mal aber das klappt nicht.
Daher meine Frage: Wie muss ich den Script ändern, das er für zwei Navis funktioniert?

Vielen Dank schon mal

LG Jonas

ps. Den Link zum Projekt bitte dem Link des Posts entnehmen.

  1. Hallo Jonas,

    http://de.selfhtml.org/css/layouts/navigationsleisten.htm#modern:
    Wie muss ich den Script ändern, das er für zwei Navis funktioniert?

    Du hast zwei Navi-Ids, eins "menu_li" und eins "menu_re", sprichst mit der Funktion aber nur "menu_li" an.

      
      function hoverIE() {  
        var LI = document.getElementById("menu_li").firstChild;  
        do {  
    
    

    Ich würde als erstes versuchen, die ID als Parameter mit zu übergeben:

      
      function hoverIE(hovernavi) {  
        var LI = document.getElementById(hovernavi).firstChild;  
        do {  
    
    

    und dann beim Aufruf weiter unten die beiden Ids mit übergeben :

      
     window.onload=hoverIE('menu_li');  
     window.onload=hoverIE('menu_re');  
    
    

    beim Aufruf selbst bin ich mir nicht ganz sicher, da ich diese Art von Aufruf selbst nicht so oft benutze, aber einen Versuch wär's mir wert ;-)

    Gruß aus Köln-Ehrenfeld,

    Elya

    1. Hallo Elya, hallo Jonas,

        
      
      >  window.onload=hoverIE('menu_li');  
      >  window.onload=hoverIE('menu_re');
      
      

      so klappt das nicht. Erstens wird dem onload der Rückgabewert der Funktion hoverIE übergeben, nicht die Referenz auf die Funktion und zweitens überschreibt die zweite Zuweisung die erste. Es müsste so gehen:

        
      function beimLaden() {  
        hoverIE('menu_li');  
        hoverIE('menu_re');  
      }  
      window.onload=beimLaden;
      

      Gruß, Jürgen

      1. Hallo JürgenB

        so klappt das nicht. Erstens wird dem onload der Rückgabewert der Funktion hoverIE übergeben, nicht die Referenz auf die Funktion und zweitens überschreibt die zweite Zuweisung die erste. Es müsste so gehen:

        function beimLaden() {
          hoverIE('menu_li');
          hoverIE('menu_re');
        }
        window.onload=beimLaden;

          
        Ah, ja, danke ,-), das ist wohl das, was man auch schon mal als "function onLoadHook()" sieht. Hätte ich auch drauf kommen können ;-)  
          
        Gruß aus Köln-Ehrenfeld,  
          
        Elya
        
        -- 
        ![](http://www.visuelya.de/selfpics/Jetztspenden-100x60.jpg)  
        [Jeder Euro hält Wikipedia am Laufen](http://spenden.wikimedia.de)
        
        1. Danke für die vielen hilfreichen Antworten.
          Vielleicht kann mir das noch einer im ganzen schreiben, weil ich wie gesagt mit Javascripten nicht so viel am Hut habe. Den Script findet ihr hier http://web38.susanne.webhoster.ag/ie-fehler-menu-korrektur.js.
          Nochmal Vielen Dank an alle

          LG Jonas

          1. Hallo nochmal,
            wollte noch fragen, warum: "Wenn ich über den Link fahre, der die Unternavi öffnet und ich dann in die Unternavi fahren will sich die Unternavi schließt?"
            Hoffe es ist halbwegs verständlich.

            Vielen Dank

            LG Jonas

            1. So sieht der Javascript jetzt nach eurer hilfe aus:

              if(window.navigator.systemLanguage && !window.navigator.language) {  
                function hoverIE() {  
                  var LI = document.getElementById("menu_li").firstChild;  
                  do {  
                    if (sucheUL(LI.firstChild)) {  
                      LI.onmouseover=einblenden; LI.onmouseout=ausblenden;  
                    }  
                    LI = LI.nextSibling;  
                  }  
                  while(LI);  
                }  
                
                function sucheUL(UL) {  
                  do {  
                    if(UL) UL = UL.nextSibling;  
                    if(UL && UL.nodeName == "UL") return UL;  
                  }  
                  while(UL);  
                  return false;  
                }  
                
                function einblenden() {  
                  var UL = sucheUL(this.firstChild);  
                  UL.style.display = "block"; UL.style.backgroundColor = "transparent";  
                }  
                function ausblenden() {  
                  sucheUL(this.firstChild).style.display = "none";  
                }  
                
                function beimLaden() {  
                  hoverIE('menu_li');  
                  hoverIE('menu_re');  
                  }  
                
                window.onload=beimLaden;  
                
              }
              
              1. Hallo Jonas,

                das ist die Funktion, die was "macht" (und die du nicht ganz nach meinen Vorschlägen übernommen hast):

                function hoverIE() {
                  var LI = document.getElementById("menu_li").firstChild

                und das hier:

                hoverIE('menu_li');
                    hoverIE('menu_re');

                ist der "Aufruf", das heißt, hier wird die Funktion "hoverIE" "gestartet". Dabei werden die Namen deiner Menüs in Klammern an die Funktion übergeben, damit die Funktion "weiß", mit welchem Element sie etwas machen soll.

                Deshalb mußt du für diesen übergebenen Wert bzw. Parameter einen Platz freihalten in deiner Funktion:

                function hoverIE(keks) {  
                var LI = document.getElementById(keks).firstChild  
                
                

                Zur Verdeutlichung heißt dieser Platzhalter in der Funktion nun "keks". Wird die Funktion aufgerufen, kriegt beim ersten Aufruf hoverIE('menu_li'); der Parameter "keks" den Wert "menu_li", beim zweiten Aufruf hoverIE('menu_re'); den Wert "menu_re".

                Jetzt besser verständlich?

                Gruß aus Köln-Ehrenfeld,

                Elya

                1. Hab deine Version schon versucht... hab nur die " nicht weg gemacht deswegen hats nicht geklappt....
                  Vielen Dank

                  LG Jonas