@Aodhan

Как заставить код работать постоянно?

Есть меню и прописанное для него поведение на клики в разных местах, но если работает только та функция, что скрывает и открывает меню при нажатии на кнопку, то все нормально. Если же запускается функция, которая закрывает меню при клике вне области меню, то перестает работать скрытие по повторному нажатию на кнопку. Где я ошибся?
JS
function hideMenu(menuId) {

var showMenuId = menuId;
if ($(menuId).is(":visible")){
$('.hiddenMenu').hide();
} else{
$(".hiddenMenu:visible").hide();
$(menuId).show('800');

}
$(document).mouseup(function (e) {
var div = $(menuId);
if (!div.is(e.target) && div.has(e.target).length===0){
div.hide();
}
});

console.log(menuId);

}

PS: Теперь повторный клик вообще не обрабатывается.
  • Вопрос задан
  • 148 просмотров
Пригласить эксперта
Ответы на вопрос 1
@noeer
Вынесите код, который закрывает меню при клике вне области меню, из функции.
Он работает автономно.
В результате должно получиться примерно так
function hideMenu(menuId) {
	if ($(menuId).is(":visible")){
		$('.hiddenMenu').hide();
	} else{
		$(".hiddenMenu:visible").hide();
		$(menuId).show('800');
	}
}

$(document).mouseup(function (e) {
	var div = $('#menuId'); // здесь сразу указываете селектор меню
	if (!div.is(e.target) && div.has(e.target).length===0){
		div.hide();
	}
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы