tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von CPoly
  • 1 Beitrag von CPoly
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
469
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    DWE DWE ist offline Grünschnabel
    Registriert seit
    Aug 2011
    Beiträge
    3
    Hallo miteinander,
    Ich arbeite noch nicht sehr lange vertieft mit Javascript, aber hoffe mit Hilfe mehr von diesem Thema zu verstehen. Viele Dokumentationen zu dem Thema schienen mich nicht zum gewünschten Ergebnis zu bringen, also glaube ich das ich irgendwo einen Verständnisfehler mache.

    Ich möchte ein einfaches Dropdown-Menü erstellen, und habe mit dem folgenden Script gearbeitet: http://javascript-array.com/scripts/...rop_down_menu/
    Das "Sample" zeigt, wie es am Ende aussieht. Selbst versuche ich, die "Hauptnavigation" über der aktivierten Subnavigation zu verfärben:
    Also wenn ich die Maus auf der geöffneten Ebene/Subnavigation bewege, soll der jeweilige Überpunkt weiterhin den Hover-effekt (Verfärbung) beibehalten anstatt seine Originalfarbe wieder anzunehmen.

    Hier ist mein HTML Code: (Habe meine eigenen PHP-Ergänzungen rausgenommen)
    HTML-Code:
    <ul id="menu">
        <li id="test1"><a href="home/" 
            onmouseover="mopen('m1')" 
            onmouseout="mclosetime()">Home</a>
            <div id="m1" onmouseover="mcancelclosetime()" onmouseout="mclosetime()">
                <a href="home/news1/">News1</a>
                <a href="home/news2/">News2</a>
                <a href="home/news3/">News3</a>
            </div>
        </li>
        <li id="test2"><a href="lorem-ipsum/subnav1/" 
            onmouseover="mopen('m2')" 
            onmouseout="mclosetime()">Lorem Ipsum</a>
            <div id="m2" onmouseover="mcancelclosetime()" onmouseout="mclosetime()">
                <a href="lorem-ipsum/subnav1/">Subnav1</a>
                <a href="lorem-ipsum/subnav2/">Subnav2</a>
            </div>
        </li>
        <li id="test3"><a class="test3" href="auditore/subnav1/" 
            onmouseover="mopen('m3')" 
            onmouseout="mclosetime()">Auditore</a>
            <div id="m3" onmouseover="mcancelclosetime()" onmouseout="mclosetime()">
                <a href="auditore/subnav1/">Subnav1</a>
                <a href="auditore/subnav2/">Subnav2</a>
                <a href="auditore/subnav3/">Subnav3</a>
            </div>
        </li>
        <li id="test4"><a class="test4" href="kontakt/formular/" 
            onmouseover="mopen('m4')" 
            onmouseout="mclosetime()">Kontakt</a>
            <div id="m4" onmouseover="mcancelclosetime()" onmouseout="mclosetime()">
                <a href="kontakt/formular/">Formular</a>
                <a href="kontakt/adresse/">Adresse</a>
            </div>
        </li>
    </ul>
    <div style="clear:both"></div>
    und hier das Javascript: (mit NEUNEU kommentierten Zeilen sind von mir selbst eingefügt worden)
    HTML-Code:
    // Copyright 2006-2007 javascript-array.com
    
    var timeout	= 500;
    var closetimer	= 0;
    var ddmenuitem	= 0;
    var test1 = document.getElementById("test1"); <!-- NEUNEU
    
    // Versteckte Ebene anzeigen
    function mopen(id)
    {	
    	// Timer zum Schliessen der Ebene abbrechen
    	mcancelclosetime();
    
    	// alte Ebene schliessen
    	if(ddmenuitem) ddmenuitem.style.visibility = 'hidden';
    
    	// neue Ebene anzeigen
    	ddmenuitem = document.getElementById(id);
    	ddmenuitem.style.visibility = 'visible';
    	
    	test1.style.setAttribute("backgroundColor", "red", false); <!-- NEUNEU
    }
    // Angezeigte Ebene schliessen
    function mclose()
    {
    	if(ddmenuitem) ddmenuitem.style.visibility = 'hidden';
    }
    
    // Timer zum Schliessen starten
    function mclosetime()
    {
    	closetimer = window.setTimeout(mclose, timeout);
    }
    
    // Timer zum Schliessen der Ebene abbrechen
    function mcancelclosetime()
    {
    	if(closetimer)
    	{
    		window.clearTimeout(closetimer);
    		closetimer = null;
    	}
    }
    
    // Ebene beim "Rausklicken" abbrechen
    document.onclick = mclose;
    Als Test versuche ich, den ersten Menüpunkt rot (dessen Hintergrundfarbe) anzuzeigen, sobald seine Subnavigation aufgeklappt wird (in meinem Fall "Home", für den Anfang).
    Die Fehlerkonsole von Firebug (das Code-Analyse Plugin für Firefox) meint, wenn ich mit der Maus auf "Home" bin:
    HTML-Code:
    test1 is null
    - test1.style.setAttribute("backgroundColor", "red", false); <!-- NEUNEU
    Aber test1 ist doch eigentlich vorhanden? Habe ich irgendwo etwas falsch gemacht, sodass das Script die ID (bzw. dessen Inhalt) nicht als solchen erkennt?

    Vielen Dank im Voraus für jegliche Hilfe!
     

  2. #2
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Anstatt dir jetzt bei deinem konkreten JavaScript Problem zu helfen, will ich dir was anderes dazu sagen.

    -Ein solches Menü geht auch ohne JavaScript
    -Das verwendete Markup ist weder valide noch semantisch korrekt

    http://www.cssplay.co.uk/menus/basic-dropdown.html






    Dein Problem könnte daran liegen, dass du den JavaScript Code vor dem Menü eingebunden hast. Zum Zeitpunkt, wo das Skript ausgeführt wird, existiert "test1" noch nicht.
    DWE bedankt sich. 

  3. #3
    DWE DWE ist offline Grünschnabel
    Registriert seit
    Aug 2011
    Beiträge
    3
    Vielen Dank für die Antwort!

    Ja, dieses Menü ist wirklich besser im CSS zu lösen, und das werde ich jetzt auch tun (danke nochmal deswegen) allerdings würde ich trotzdem gerne wissen, wieso die Variable so nicht funktioniert um es im Zukunft zu vermeiden.
    Meinst du das Markup des Vorlage-Skriptes oder mein eigenes?

    Das Skript wird wirklich vor dem Menü aufgerufen, allerdings funktionierte es als Menü. Wenn ich es dennoch danach einbinde, bekomme ich folgende Meldung bei Aktivierung des Hauptmenüpunktes:
    HTML-Code:
    test1.style.setAttribute is not a function
    - test1.style.setAttribute("backgroundColor", "red", false); <!-- NEUNEU
     

  4. #4
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    "style" hat keine Methode "setAttribute", weil style selbst ist doch das Attribut!

    Code javascript:
    1
    2
    3
    4
    5
    6
    
    test1.style.backgroundColor = 'red';
     
     
    //oder (NICHT sinnvoll!)
     
    test1.setAttribute('style', 'background-color:red;');
    DWE bedankt sich. 

  5. #5
    DWE DWE ist offline Grünschnabel
    Registriert seit
    Aug 2011
    Beiträge
    3
    Habe ich wohl eine veraltete/falsche Dokumentation gelesen... Grosses Dankeschön für den Hinweis!
     

Ähnliche Themen

  1. CSS Navigation ohne Javascript möglich?
    Von julieann im Forum CSS
    Antworten: 5
    Letzter Beitrag: 26.06.07, 23:46
  2. Javascript Navigation
    Von fruity im Forum Javascript & Ajax
    Antworten: 0
    Letzter Beitrag: 24.08.05, 14:10
  3. Navigation Javascript
    Von DjMG im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 24.01.05, 01:48
  4. Navigation über Javascript?
    Von Master Flexi im Forum Javascript & Ajax
    Antworten: 3
    Letzter Beitrag: 25.03.04, 19:21
  5. Navigation mittels JavaScript (DHTML)
    Von Prinztom im Forum Javascript & Ajax
    Antworten: 3
    Letzter Beitrag: 07.11.02, 09:22

Stichworte