Согласитесь, что намного удобнее закрыть всплывающее окно, кликнув в любом месте за его пределами, нежели по крестику, предварительно перетаскивая к нему курсор мышки. Кроме того, бывают такие ситуации при которых использовать кнопку закрытия неполучится в принципе, например: выпадающие кастомные селекты, меню, формы поиска.
Итак, что же нам необходимо для реализации такого приема, как закрытие блока при клике за его приделами? Понять его алгоритм:
- Есть открытое popup-окно, блок меню или прочее.
- Хотим, чтобы при клике за его пределами оно закрывалось.
- Соответственно, будем работать с событием «Произошёл клик по странице» с проверкой выполнения двух условий: «Клик был не по нашему элементу» и «Клик был не по дочерним элементам нашего элемента».
- Если оба условия в нашем событии выполняются, скрываем элемент.
Теперь собственно сам код:
jQuery(function($){
$(document).mouseup(function (e){ // отслеживаем событие клика по веб-документу
var block = $("#block"); // определяем элемент, к которому будем применять условия (можем указывать ID, класс либо любой другой идентификатор элемента)
if (!block.is(e.target) // проверка условия если клик был не по нашему блоку
&& block.has(e.target).length === 0) { // проверка условия если клик не по его дочерним элементам
block.hide(); // если условия выполняются - скрываем наш элемент
}
});
});