Стоить задача сделать выезжающее меню. При клике по ссылке, к блоку добавляются классы, меню выезжает. Необходимо закрывать его при клике вне блока. С этим я справился, но оно и закрывается и при клике по самому блоку меню, что надо исключить.
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)