Как перехватить клик вне модального окна bootstrap?

Добрый день. Как можно перехватить клик вне модального окна bootstrap?
Пытался сделать так:
$('#modalfoto').on('hidden.bs.modal', function (e) {
    alert('Модальное окно!');
});

и так:
$( ".modal-backdrop" ).click(function() {
  alert( "Модальное окно!" );
});

Ни фига не заработал
  • Вопрос задан
  • 3302 просмотра
Пригласить эксперта
Ответы на вопрос 2
Petroveg
@Petroveg
Миром правят маленькие с#@&ки
Способ «в лоб» — смотрим на предков в поисках окна

$(document).on('click', function () {
	if (!$(this).closest('#modalfoto').length) {
		console.log('Это — не моя клетка!');
	}
});


Способ поизящнее — пользуемся последовательностью узлов при всплытии. Поскольку через элемент, называемый «модальным окном», событие пройдёт по-любому раньше, чем через document, то мы цепляем вагончик и в document лишь проверяем его наличие.

$(document)
	.on('click', '#modalfoto', function (e) {
		e.modalWindow = true;
	})
	.on('click', function (e) {
		if (!e.modalWindow) {
			console.log('Это — не моя клетка!');
		}
	});
Ответ написан
Комментировать
На modal-backdrop не получилось из-за того, что над ним довлеет #modalfoto. Поэтому я бы добавил событие щелчка по #modalfoto, в которое включил бы проверку на координаты щелчка. Если пользователь щелкнул за пределами div, обрабатываем событие, если нет - ничего не делаем.
Набросал примерную схему действий.
$("#modalfoto").click(function(e){
	var modalDialog = $(this).find('.modal-dialog');
	var xOffset = modalDialog.offset().left;
	var yOffset = modalDialog.offset().top;
	if((e.pageX < xOffset || e.pageX > xOffset + modalDialog.width()) &&
	   (e.pageY < yOffset || e.pageY > yOffset + modalDialog.height()) {
	   // какие-то действия
	}
});
Ответ написан
Ваш ответ на вопрос

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

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