@danchikraw
Веб-додик

Почему функция работает не так?

Есть функция для модальных окон, но он работает только для последнего вызова. В чём проблема?

function popUp(elem, open, close) {
	body = document.querySelector('body');
	close = document.querySelector(close);
	open = document.querySelector(open);
	elem_obj = document.querySelector(elem);

	if (close != '') {
		close.addEventListener('click', function() {
			fadeOut(elem);
			body.style.overflow = 'visible';
		}, false);
	}
	

	if (open != '') {
		open.addEventListener('click', function() {
			fadeIn(elem);
			body.style.overflow = 'hidden';
		}, false);
	}

	body.addEventListener('click', function(e) {
		display = window.getComputedStyle(elem_obj).display;
		console.log(elem_obj); // В КОНСОЛИ ВОЗВРАЩЕТЬСЯ ТОЛЬКО ПОСЛЕДНИЙ ВЫЗВАНЫЙ ЭЛЕМЕНТ, ДВА РАЗА
		if (!e.target.closest(elem + ' > *') && e.target != open && display != 'none') {
			fadeOut(elem);
			body.style.overflow = 'visible';
		}
	}, false);
}

popUp('.call-form__wrapper', '.main-section__slogan__button', '.call-form__close');
popUp('.promo-popup__wrapper', '.promo-info', '.promo-popup__close');
  • Вопрос задан
  • 157 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Потому что кое-кто не в курсе, что бывает, когда выполняется установка значения необъявленной переменной.

Если переменной нет, она будет искаться во внешних областях видимости. И если ни в одной из внешних областей видимости переменной с таким именем нет, будет создана глобальная переменная. То есть, у вас при первом вызове popUp создаётся глобальная переменная elem_obj, а при последующих вызовах обновляется её значение.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
29 мар. 2024, в 17:14
4000 руб./за проект
29 мар. 2024, в 17:04
5000 руб./за проект
29 мар. 2024, в 17:03
3000 руб./за проект