#jquery #drop-down-menu
#jquery #выпадающее меню
Вопрос:
Я использую пользовательские выпадающие списки codedrops для создания выпадающего меню http://tympanus.net/codrops/2012/10/04/custom-drop-down-list-styling /
Однако я не могу закрыть один пункт меню, если я нажму на другой пункт меню, также потому, что у меня есть второй вложенный список, который переключается в главном списке, я могу скрыть выпадающий список, когда я нажимаю на активную ссылку.
Мне нужно, чтобы выпадающий список закрывался, если я нажимаю либо на второй элемент навигации, за пределами меню, либо если я нажимаю на навигационную ссылку во второй раз (но теперь, когда я нажимаю на вторую выпадающую ссылку)
function DropDown(el) {
this.dd = el;
this.initEvents();
}
DropDown.prototype = {
initEvents : function() {
var obj = this;
obj.dd.on('click', function(event){
$(this).addClass('active');
event.stopPropagation();
});
}
}
$(function() {
var dd = new DropDown( $('.ddMenu') );
$(document).click(function() {
$('.ddMenu').removeClass('active');
});
});
$(function () {
var $subs = $('li.expanded > ul').hide();
$('li.expanded > a').click(function (e) {
var $ub = $(this).next().stop(true, true).slideToggle(300, function(){
$('li.expanded > a').addClass('close').removeClass('open');
if($ub.is(':visible')){
$(this).prev('a').addClass('open').removeClass('close');
}
});
$subs.not($ub).slideUp();
e.preventDefault();
});
Ответ №1:
Измените свой прототип выпадающего списка на этот (JSFiddle code):
DropDown.prototype = {
initEvents : function() {
var obj = this;
obj.dd.on('click', function(event){
if(!$(event.target).hasClass('secondDropDown'))
{
if($(this).hasClass('active'))
$(this).removeClass('active');
else
$(this).addClass('active');
event.stopPropagation();
}
});
}
}
ОБНОВЛЕН КОД: JSFiddle code
Комментарии:
1. это не закрывает первый выпадающий список при нажатии на второй, а также закрывает выпадающий список при нажатии на второй внутренний выпадающий список
2. верно. Я пытаюсь это исправить