Reputation: 667
I was trying to find solution but i can't, every single code wasn't good for my project. Here is navigation structure
<nav>
<ul class="menu">
<li>
<ul class="submenu">
<li><a></a></li>
<li><a></a></li>
<li><a></a></li>
<li><a></a></li>
</ul>
</li>
<li>
<ul class="submenu">
<li><a></a></li>
<li><a></a></li>
<li><a></a></li>
<li><a></a></li>
</ul>
</li>
<li></li>
<li></li>
</ul>
</nav>
$(".menu li").click(function(){
$(this).toggleClass("visible");
});
$('body').click(function(){
if( $(".menu li").hasClass("visible") ){
$(".menu li").removeClass("visible");
};
});
What a want to achieve is next:
.menu li
to add class active
.menu li
item or on .submenu li a
, remove class active
from another li
item that has that class.menu li
I hope you understand what i want. Sorry for my bad grammar
Update:
Modified code by: @Sasa Novakovic (thank you again bro :) )
function removeActiveMenuClass(active_element){
$('.menu li').not(active_element).removeClass('visible');
}
$( '.menu>li' ).click(function(e) {
e.stopPropagation();
var $_this = $(this);
removeActiveMenuClass($_this);
if ($_this.hasClass('visible')) {
$_this.removeClass('visible');
}
else {
$_this.addClass('visible');
}
});
$('body').click(function() {
removeActiveMenuClass();
});
Upvotes: 2
Views: 2723
Reputation: 116
Here is the code for you jsfiddle.
$('html').click(function() {
removeActiveMenuClass();
});
$( '.menu>li, .submenu>li' ).click(function(e) {
e.stopPropagation();
removeActiveMenuClass();
$(this).addClass('active');
});
function removeActiveMenuClass(){
$('.menu li').removeClass('active');
}
Upvotes: 5
Reputation: 7117
$('.submenu li').click(function(){
$('.submenu li').removeClass('addclass');
$(this).addClass('addclass');
})
$(document).mouseup(function(){
$('.submenu li').removeClass('addclass');
})
.addclass{
background-color:red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<nav>
<ul class="menu">
<li>
<ul class="submenu">
<li><a>submenu1</a></li>
<li><a>submenu2</a></li>
<li><a>submenu3</a></li>
<li><a>submenu4</a></li>
</ul>
</li>
<li>
<ul class="submenu">
<li><a>submenu1</a></li>
<li><a>submenu2</a></li>
<li><a>submenu3</a></li>
<li><a>submenu4</a></li>
</ul>
</li>
<li></li>
<li></li>
</ul>
</nav>
Upvotes: 2
Reputation: 8543
Try adding this snippet to your HTML:
<script>
var options = $('.menu').find('li');
options.onclick(function(){
$('.active').removeClass('active');
$(this).addClass('active');
});
$('*').not(options).click(function(){$('.active').removeClass('active')});
</script>
Upvotes: 1