На самом деле проблема в том, что контейнер Ли слушатель выполняется, когда вы нажимаете на элементах ребенок Ли, так всегда делает включенность фактическое состояние.
Следуя вашему подходу, самый простой способ решить это - добавить несколько классов css, чтобы вы могли узнать, является ли элемент clicked корнем li или дочерним li.
Например, вы можете добавить класс к дочерним ссылкам, например «подзаголовок», чтобы распознать их, а затем на слушателе вы просто проверяете, не является ли целевой элемент не подзаголовкой, чтобы добавить и удалить активный класс:
$('#cssmenu li').on('click', function(e){
var $target = $(e.target),
$currentElement = $(this);
if (!$target.hasClass('sub-link') && !$currentElement.hasClass('active')){
var $activeElement = $('#cssmenu li.active');
$activeElement.find('ul').slideUp('normal');
$activeElement.removeClass('active');
$currentElement.addClass('active');
$currentElement.find('ul').slideDown('normal');
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div id="cssmenu">
\t <ul>
\t \t <li><a href="#"><span>Home</span></a></li>
\t \t <li><a href="#"><span>Products</span></a>
\t \t \t <ul class='sub-link-list' style='display: none;'>
\t \t \t \t <li><a class='sub-link' href="#">Widgets</a></li>
\t \t \t \t <li><a class='sub-link' href="#">Menus</a></li>
\t \t \t \t <li><a class='sub-link' href="#">Products</a></li>
\t \t \t </ul>
\t \t </li>
\t \t <li><a href="#"><span>Company</span></a>
\t \t \t <ul class='sub-link-list' style='display: none;'>
\t \t \t \t <li><a class='sub-link' href="#">About</a></li>
\t \t \t \t <li><a class='sub-link' href="#">Location</a></li>
\t \t \t </ul>
\t \t </li>
\t \t <li><a href="#"><span>Contact</span></a></li>
\t </ul>
</div>
http://jsfiddle.net/5ovn7Laj/
Я надеюсь, что это помогает!
ничего себе, вы сделать это выглядит легко, заранее спасибо –