@denn70

Удалить класс при клике вне блока, но исключить клик по самому блоку?

Стоить задача сделать выезжающее меню. При клике по ссылке, к блоку добавляются классы, меню выезжает. Необходимо закрывать его при клике вне блока. С этим я справился, но оно и закрывается и при клике по самому блоку меню, что надо исключить.
function() {
$(".centercol").toggleClass("open-sidebar"); // - Основной контейнер сдвигается вправо на 240px
$("#sidebar").toggleClass("open");// - меню сдвигается вправо на 240px и появляется)
$("#inner").toggleClass("pointer")
$(".block-header").toggleClass("pointer")
$(".close").show();
return false;
	});
	
	
$(".close").click(function(){ // - закрытие по крестику
$(".centercol").removeClass("open-sidebar");
$("#sidebar").removeClass("open");
$("#inner").removeClass("pointer")
$(".block-header").removeClass("pointer")
$(".close").hide();
});	
	// - закрытие при клике вне блока, должно исключать клик по самому блоку по идее
$(document).click( function(event){
	if( $(event.target).closest("#sidebar").length ) // ищет в коде элемент #sidebar
	return;
$("#sidebar").removeClass("open"); // - меню отьезжает на 240px назад и прячется)
$("#inner").removeClass("pointer")
$(".block-header").removeClass("pointer")
$(".close").hide(); // скрываем его
	event.stopPropagation();
});


Код закрытия пробовал и такой

$(document).mouseup(function (e){ // событие клика по веб-документу
		var div = $("#sidebar"); // тут указываем ID элемента
		if (!div.is(e.target) // если клик был не по нашему блоку
		    && div.has(e.target).length === 0) { // и не по его дочерним элементам
			$("#sidebar").removeClass("open"); // - меню отьезжает на 240px назад и прячется)
$("#inner").removeClass("pointer")
$(".block-header").removeClass("pointer")
$(".close").hide(); // скрываем его скрываем его
		}
	});


Оба варианта все равно закрывают меню при клике на сам блок меню - #sidebar. Есть ощущение, что это происходит, из-за того, что меню по коду вложено глубоко и клик происходит по родительским элементам. Хотя, я блоку меню и назнчали самый высокий z-index)
  • Вопрос задан
  • 2626 просмотров
Пригласить эксперта
Ответы на вопрос 1
что-то типа
$(document.body).on('click', function(e){
  if(!$(e.target).closest('#sidebar').length){
    close_sidebar();
  }
})
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы