login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Multi-level dropdown menu probleem (Opgelost)

Offline Jointjeff - 05/05/2014 03:54
Avatar van JointjeffHTML interesse Hallo iedereen,

Ik wil met een submenu het volgende bereiken.

- Je klikt op het plusje en het submenu wordt weergeven. Dit kan ook een submenu in een submenu (multi-level) zijn.

- Als je op een plusje klikt moeten alle andere submenus dichtklappen. Uiteraard wanneer dit een submenu in een submenu is, moet de bovenliggende dus gewoon open blijven staan.

Echter lukt me dat niet. Ik kan zo niet bedenken hoe ik dat moet realiseren.
Zie ook mijn jsFiddle voor een beter beeld: http://jsfiddle.net/6EfeZ/1/

Hopende op hulp!

4 antwoorden

Gesponsorde links
Offline Thomas - 05/05/2014 10:25
Avatar van Thomas Moderator Hiermee zul je wat moeten experimenteren, maar hier zijn wat tips die mogelijk helpen:

* regel 15 van je HTML heeft een typefout (</i> in plaats van </li>)
* regel 13 van je JavaScript zorgt ervoor dat alles ingeklapt wordt, waarschijnlijk wil je dat niet, misschien werkt de volgende strategie beter in je click event:
- verwijder eerst alle active classes
- voeg aan het element dat je uit wilt klappen (gebruik $(this)) de active class toe
- weet niet of dit kan, maar als je met een selector elementen kunt selecteren die de active class NIET hebben (een soort van negatie dus), dan kun je dit gebruiken om alle overige elementen in te klappen; of misschien nog simpeler, klap gewoon ALLES in 
- klap vervolgens (of tegelijkertijd) het element met de active class uit

Mogelijk moet je wel op meerdere niveau's een active class aan blijven houden als je een meerdimensionaal menu hebt, dus ik weet niet of je zomaar alle classes kunt verwijderen. Misschien moet je het uitgeklapte "pad" bijhouden in een stack ofzo, of je laat ze gewoon uitgeklapt.

Ook kun je nu uitgeklapte elementen niet meer inklappen, die blijven heen en weer jojo'en . Misschien kun je gebruik maken van toggle() (althans, ik dacht dat het zo heette).
Offline Jointjeff - 05/05/2014 10:31
Avatar van Jointjeff HTML interesse Hey Fangorn,

Bedankt voor je reactie.

Eerst overal slideup() en de 'active'-class verwijderen had ik ook gedaan. Het resultaat is dat de bovenliggende submenu dan ook dichtklapt, dus dan zie je de onderliggende submenu niet openklappen (klinkt heel vaag, maar hoop dat je begrijpt wat ik bedoel).

En juist op dat punt loop ik vast.
Offline Thomas - 05/05/2014 11:27 (laatste wijziging 05/05/2014 11:31)
Avatar van Thomas Moderator De volgende implementatie van het click event heeft volgens mij het gewenste gedrag. Die while is misschien niet helemaal optimaal, maar als je dropdown klopt qua HTML zou dit geen problemen op moeten leveren.

Dit zou ook moeten werken met meerdere dropdown menu's, maar bij het selecteren van een item in een ander menu wordt dan dus wel alles ingeklapt.

  1. $('.plus').click(function(e){
  2. e.preventDefault();
  3.  
  4. $selectedUL = $(this).siblings('ul'); // zoek de UL behorend bij de link van het click event
  5. selectedULactive = $selectedUL.hasClass('active'); // om te onthouden of de huidige ul al actief was
  6.  
  7. // verwijder alle active classes
  8. $('ul.dropdown ul').removeClass('active');
  9.  
  10. // geef het huidige pad (alle ul's tot aan de "root" ul) de active class
  11. $parentUL = $selectedUL;
  12. while (!$parentUL.hasClass('dropdown')) {
  13. $parentUL.addClass('active');
  14. $parentUL = $parentUL.parent().parent(); // selecteer de volgende "parent ul"
  15. }
  16.  
  17. // klap alle overige ul's in
  18. $('ul.dropdown ul:not(".active")').slideUp();
  19.  
  20. // klap het huidige item uit of in, afhankelijk van of deze al uitgeklapt was
  21. if (selectedULactive) {
  22. $selectedUL.removeClass('active'); // je klapt het item in, verwijder dus de active class
  23. $selectedUL.slideUp();
  24. } else {
  25. $selectedUL.slideDown();
  26. }
  27. });


EDIT: selectedULactive is geen jQuery object (maar een boolean), dus $ weer verwijderd ten einde verwarring te voorkomen.
Bedankt door: Jointjeff
Offline Jointjeff - 05/05/2014 11:42
Avatar van Jointjeff HTML interesse FangorN, bij deze bedankt want het werkt 

Enige wat ik nog heb toegevoegd is een toggleClass('active') op de plus icoontjes.

Top, ontzettend bedankt!
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.197s