Reputation: 57
I am trying to create a drop down using jquery; however when I click on any of the menu with drop down; all the drop-down open. Here is my code:
$('.has-dropdown').on('click', function() {
if(!$('.nav-dropdown').is(':visible')){
$(".nav-dropdown" ).slideDown();
var $this = $(this);
$this.toggleClass('is-active').children('ul').toggleClass('is-visible');
} else {
$(".nav-dropdown" ).slideUp();
var $this = $(this);
$this.toggleClass('is-active').children('ul').toggleClass('is-visible');
}
});
HTML Code:
<ul class="nav-menu menu">
<li class="menu-item has-dropdown">
<a href="#!" class="menu-link dropdown">Home Pages</a>
<ul class="nav-dropdown">
<li class="menu-item"> <a href="index.html" class="menu-link">Home v1</a> </li>
<li class="menu-item"> <a href="index_2.html" class="menu-link">Home v2</a></li>
</ul>
</li>
<li class="menu-item has-dropdown">
<a href="#!" class="menu-link">Product Page</a>
<ul class="nav-dropdown">
<li class="menu-item"> <a href="product.html" class="menu-link">Product List v1</a> </li>
<li class="menu-item"> <a href="index_2.html" class="menu-link">Product List v2</a></li>
</ul>
</li>
<li class="menu-item"> <a href="#!" class="menu-link">Contact</a> </li>
<li class="menu-item"> <a href="#!" class="menu-link">About</a> </li>
</ul>
Upvotes: 1
Views: 2192
Reputation: 82241
That is because you are targeting .nav-dropdown
elements. you need to only find the element in current li:
$(this).closest('li').find('.nav-dropdown').slideDown();
Complete Code:
$('.has-dropdown').on('click', function() {
var currentnav=$(this).closest('li').find('.nav-dropdown');
if(!currentnav.is(':visible')){
currentnav.slideDown();
var $this = $(this);
$this.toggleClass('is-active').children('ul').toggleClass('is-visible');
} else {
currentnav.slideUp();
var $this = $(this);
$this.toggleClass('is-active').children('ul').toggleClass('is-visible');
}
});
Upvotes: 3