2016-10-12 1 views
0

Ich bin ein grundlegendes Dropdown-Menü erstellen, und wenn Sie auf einen Menüpunkt klicken, möchte ich sicherstellen, dass alle geöffneten Dropdown-Menüs zuerst schließen.Menü toggle funktioniert nicht bei der Verwendung nicht (dieser)

Mit not (this) in der zweiten Zeile kann toggleClass aktiviert, aber deaktiviert werden.

Was fehlt mir?

$('.nav-dropdown').click(function(){ 
    $('.nav-dropdown-content').not(this).addClass('hide'); 
    $('.nav-dropdown-content', this).toggleClass('hide'); 
}); 

Hier ist der HTML

<div class="nav_wrapper"> 
    <ul> 
    <li class="nav-dropdown"> 
     Menu Item 1 <span>&dtrif;</span> 
     <div class="nav-dropdown-content"> 
     <a href="#">Sub Menu 1</a> 
     <a href="#">Sub Menu 2</a> 
     </div> 
    </li> 
    <li class="nav-dropdown"> 
     Menu Item 2 <span>&dtrif;</span> 
     <div class="nav-dropdown-content"> 
     <a href="#">Sub Menu 3</a> 
     <a href="#">Sub Menu 4</a> 
     </div> 
    </li> 
    </ul> 
</div> 
+0

verwenden können, kann nicht Du drehst sie einfach aus und drehst sie dann um wieder an? '$ ('.nav-dropdown-content'). addClass ('hide'); $ ('. nav-dropdown-content', this) .removeClass ('hide'); ' – Shanimal

+1

Bitte zeigen Sie die relevante HTML-Struktur an. 'this' ist nicht das, was du willst – charlietfl

+0

Sogar addClass ('hide') statt nicht (dies) scheint den Toggle zu knacken – ok1ha

Antwort

3

Versuchen Sie, die folgende

$('.nav-dropdown').click(function(){ 
    var $content = $('.nav-dropdown-content', this).toggleClass('hide'); 
    // exclude the current content instance 
    $('.nav-dropdown-content').not($content).addClass('hide');  
}); 

this das $('.nav-dropdown') Element ist, so dass Sie es nicht als not() für $('.nav-dropdown-content')

+0

Macht vollkommen Sinn, danke! – ok1ha

+1

können Sie auch '$ (this) .siblings(). Find ('. Nav-dropdown-content')' für die anderen verwenden – charlietfl