Reputation: 2953
I have a list with submenus. Now I can open one at a time: Click on List 1 will open submenu 1. Click on List 2, submenu 2 will open and submenu 1 is closed automatically.
Problem: I click on List 2 again, submenu 2 should be closed based on the slideToggle()
, but it is closed and open right after that.
Please help.
$(document).ready(function () {
$('li a').on('click', function(){
$('.square').slideUp();
$(this).siblings().slideToggle();
});
});
li {padding:20px; border: solid 1px;margin:5px;}
.square {
display: none;
border: 1px solid red;
}
.active {
display: block;
border: 1px solid red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li>
<a class="test">Hover List1</a>
<div class="square">
Square 1
</div>
</li>
<li>
<a>Hover List2</a>
<div class="square">
Square 2
</div>
</li>
<li>
<a>Hover List3</a>
<div class="square">
Square 3
</div>
</li>
<li>
<a>Hover List4</a>
<div class="square">
Square 4
</div>
</li>
</ul>
Upvotes: 2
Views: 53
Reputation: 7368
You have to do the slideUp()
for div
of parent().siblings()
:
$(this).parent().siblings().find('.square').slideUp();
$(document).ready(function () {
$('li a').on('click', function(){
$(this).parent().siblings().find('.square').slideUp();
$(this).siblings().slideToggle();
});
});
li {padding:20px; border: solid 1px;margin:5px;}
.square {
display: none;
border: 1px solid red;
}
.active {
display: block;
border: 1px solid red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li>
<a class="test">Hover List1</a>
<div class="square">
Square 1
</div>
</li>
<li>
<a>Hover List2</a>
<div class="square">
Square 2
</div>
</li>
<li>
<a>Hover List3</a>
<div class="square">
Square 3
</div>
</li>
<li>
<a>Hover List4</a>
<div class="square">
Square 4
</div>
</li>
</ul>
Upvotes: 1