Назад к вопросам
Junior
164
questionbank
Как закрыть модальное окно при клике вне его?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Добавить обработчик события click на документ (document). В обработчике проверять, был ли клик совершен вне модального окна, сравнивая event.target с модальным окном или его содержимым. Если клик был вне, скрывать модальное окно.
// Предположим, у вас есть элемент модального окна и кнопка для его открытия
const modal = document.getElementById('myModal');
const openModalBtn = document.getElementById('openModalBtn');
// Функция для закрытия модального окна
function closeModal() {
modal.style.display = 'none';
}
// Функция для открытия модального окна (для примера)
// openModalBtn.onclick = function() {
// modal.style.display = 'block';
// }
// Обработчик клика на элементе span (или другом элементе для закрытия внутри модалки)
// const closeBtn = document.querySelector('.close'); // Если есть элемент для закрытия внутри модалки
// if (closeBtn) {
// closeBtn.onclick = closeModal;
// }
// Обработчик клика на всем документе
document.addEventListener('click', function(event) {
// Проверяем, был ли клик вне модального окна
// Используем contains() для проверки, находится ли target внутри modal
// Также проверяем, что клик не был на самой кнопке открытия модального окна,
// чтобы предотвратить мгновенное закрытие при открытии.
if (event.target === modal) {
closeModal();
}
});
// Альтернативный подход: Проверка, не является ли target частью модального окна
// document.addEventListener('click', function(event) {
// if (!modal.contains(event.target) && event.target !== openModalBtn) {
// closeModal();
// }
// });
// Дополнительно: закрытие по клавише Esc
document.addEventListener('keydown', function(event) {
if (event.key === 'Escape') {
closeModal();
}
});
Также можно использовать обработчик на оверлей (фоновый элемент), который покрывает весь экран, если таковой используется для модального окна. Клик по оверлею тоже будет закрывать модальное окно.
// Предположим, есть оверлей
const modalOverlay = document.getElementById('modalOverlay');
const modal = document.getElementById('myModal');
// Функция для закрытия модального окна
function closeModal() {
modal.style.display = 'none';
modalOverlay.style.display = 'none'; // Скрыть оверлей тоже
}
// Обработчик клика на оверлее
// Предполагаем, что оверлей виден только когда модалка открыта
if (modalOverlay) {
modalOverlay.addEventListener('click', function() {
closeModal();
});
}
// Если клик внутри модального окна не должен его закрывать,
// можно остановить всплытие события click внутри модалки.
// modal.addEventListener('click', function(event) {
// event.stopPropagation(); // Останавливает всплытие события на родительские элементы (включая оверлей)
// });