2017-04-23 6 views
0

Ich habe ein Dropdown-Menü in einer Navigationsleiste erstellt. Wenn ich eines davon habe, ist das natürlich in Ordnung, aber wenn ich mehrere Dropdown-Menüs habe, tut es das nicht Arbeiten wie vorgesehen. Wenn ich auf dem Dropdown-ersten klicken, öffnet es, aber dann, wenn ich auf auch auf der zweiten Drop-down nach der Eröffnung, beide von ihnen öffnet ohne das andere zu schließen, die nicht angeklickt wird Wie implementiere ich eine solche Funktionalität?Mehrere Dropdowns auf einem einzelnen Container, ohne sich gegenseitig zu stören

Hier ist mein aktueller Code:

HTML:

<nav class="navbar"> 
    <ul class="navbar-links"> 
     <li class="navbar-link"><a href="#">Home</a></li> 
     <li class="navbar-link"><a href="#">About</a></li> 
     <li class="navbar-link dropdown"> 
      <a href="#"> 
      Projects 
      <i class="fa fa-caret-down" aria-hidden="true"></i> 
      </a> 
      <div class="dropdown-content"> 
       <a href="#">Shanary</a> 
       <a href="#">Physics Solver</a> 
       <a href="#">A simple blog</a> 
      </div> 
     </li> 
     <li class="navbar-link dropdown"> 
      <a href="#"> 
      Projects 
      <i class="fa fa-caret-down" aria-hidden="true"></i> 
      </a> 
      <div class="dropdown-content"> 
       <a href="#">Something else</a> 
       <a href="#">Text Editor</a> 
       <a href="#">A social Network</a> 
      </div> 
     </li> 
    </ul> 
</nav> 

CSS:

.navbar { 
    background-color: #3A506B; 
    border-bottom: 1px solid #cccccc; 
    box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.2); 
} 
.navbar-links { 
    margin: 0; 
    font-size: 16px; 
    list-style-type: none; 
} 
.navbar-link, 
.dropdown-content a { 
    display: inline-block; 
    padding: 20px 0px; 
    transition: background 0.1s ease-in-out; 
} 
.navbar-link:hover, 
.dropdown-content a:hover { 
    background: #3f5775; 
} 
.navbar-link a { 
    padding: 20px 10px; 
    color: #5DD39E; 
    text-decoration: none; 
} 
.dropdown { 
    position: relative; 
    display: inline-block; 
} 
.dropdown-content { 
    display: none; 
    position: absolute; 
    top: 100%; 
    min-width: 160px; 
    padding: 10px; 
    z-index: 1; 
    background-color: #3A506B; 
} 
.dropdown-content a { 
    display: block; 
} 
body { 
    font-family: 'Open Sans', Arial, sans-serif; 
    background: #FFFFFF; 
    color: #16302B; 
    margin: 0px; 
} 
.visible { 
    display: block; 
} 

und so weit dies ist meine JavaScript-Datei:

$('.dropdown').click(function() { 
    $(this).find('.dropdown-content').toggleClass('visible'); 
}); 

Auch hier ist der JSFiddle.

Das Problem ist, dass, beide von ihnen geöffnet, ohne das andere zu schließen, ist hier ein Bild von dem, was passiert ist:

Image of the situation

Antwort

1

Sie eine Schleife durch alle Ziele haben, um zu bestimmen, ob sie sind das aktuelle Ziel ist oder nicht, und entfernen sie die Sichtbarkeit

Siehe Schnipsel unten

$('.dropdown').click(function(e) { 
 
    $(this).find('.dropdown-content').toggleClass('visible'); 
 
    var that = this; 
 
    $('.dropdown').each(function() { 
 
    if (that != this) { 
 
     $(this).find('.dropdown-content').removeClass('visible'); 
 
    } 
 
    }) 
 
});
.navbar { 
 
    background-color: #3A506B; 
 
    border-bottom: 1px solid #cccccc; 
 
    box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.2); 
 
} 
 

 
.navbar-links { 
 
    margin: 0; 
 
    font-size: 16px; 
 
    list-style-type: none; 
 
} 
 

 
.navbar-link, 
 
.dropdown-content a { 
 
    display: inline-block; 
 
    padding: 20px 0px; 
 
    transition: background 0.1s ease-in-out; 
 
} 
 

 
.navbar-link:hover, 
 
.dropdown-content a:hover { 
 
    background: #3f5775; 
 
} 
 

 
.navbar-link a { 
 
    padding: 20px 10px; 
 
    color: #5DD39E; 
 
    text-decoration: none; 
 
} 
 

 
.dropdown { 
 
    position: relative; 
 
    display: inline-block; 
 
} 
 

 
.dropdown-content { 
 
    display: none; 
 
    position: absolute; 
 
    top: 100%; 
 
    min-width: 160px; 
 
    padding: 10px; 
 
    z-index: 1; 
 
    background-color: #3A506B; 
 
} 
 

 
.dropdown-content a { 
 
    display: block; 
 
} 
 

 
body { 
 
    font-family: 'Open Sans', Arial, sans-serif; 
 
    background: #FFFFFF; 
 
    color: #16302B; 
 
    margin: 0px; 
 
} 
 

 
.visible { 
 
    display: block; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<nav class="navbar"> 
 
    <ul class="navbar-links"> 
 
    <li class="navbar-link"><a href="#">Home</a></li> 
 
    <li class="navbar-link"><a href="#">About</a></li> 
 
    <li class="navbar-link dropdown"> 
 
     <a href="#"> 
 
      Projects 
 
      <i class="fa fa-caret-down" aria-hidden="true"></i> 
 
      </a> 
 
     <div class="dropdown-content"> 
 
     <a href="#">Shanary</a> 
 
     <a href="#">Physics Solver</a> 
 
     <a href="#">A simple blog</a> 
 
     </div> 
 
    </li> 
 
    <li class="navbar-link dropdown"> 
 
     <a href="#"> 
 
      Projects 
 
      <i class="fa fa-caret-down" aria-hidden="true"></i> 
 
      </a> 
 
     <div class="dropdown-content"> 
 
     <a href="#">Something else</a> 
 
     <a href="#">Text Editor</a> 
 
     <a href="#">A social Network</a> 
 
     </div> 
 
    </li> 
 
    </ul> 
 
</nav>

+0

Ich lief das Code-Snippet, es geht nicht wie vorgesehen. Sie können die Dropdown-Menüs nicht umschalten, Sie können einfach zwischen ihnen wechseln. Mit anderen Worten, wenn Sie auf den Dropdown-Schalter klicken, werden sie nicht ausgeblendet. Was ich will. – Akar

+0

Ich habe einen Schnitt gemacht .... check it out – repzero

+0

Das wird es tun, Danke für die Antwort. Ich werde es aufwerten und bestätigen. – Akar

Verwandte Themen