@fantastikgodd

Как по клику на кнопку окрывать нужный попап ( класс в дата атрибуте)?

класс для показа попапа - popup--active
https://jsfiddle.net/7xvabjuk/6/
  • Вопрос задан
  • 133 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const openSelector = '.block__item';
const closeSelector = '.close';
const itemSelector = '.popup';
const activeClass = 'popup--active';


// делегирование, общий обработчик клика - для открытия и закрытия сразу,
// назначается один раз для всех элементов;
// связь кнопок открытия попапов с попапами через data-атрибут
document.addEventListener('click', ({ target: t }) => {
  let item = t.closest(closeSelector)?.closest(itemSelector);
  if (!item) {
    const open = t.closest(openSelector);
    if (open) {
      item = document.querySelector(`${itemSelector}.${open.dataset.popup}`);
    }
  }

  item?.classList.toggle(activeClass);
});

// или, отдельные обработчики клика для открытия и закрытия,
// назначаются каждому элементу индивидуально;
// связь кнопок открытия попапов с попапами через индексы
const open = [...document.querySelectorAll(openSelector)];
const close = document.querySelectorAll(closeSelector);
const items = document.querySelectorAll(itemSelector);

const onOpenClick = e => items[open.indexOf(e.currentTarget)].classList.add(activeClass);
open.forEach(n => n.addEventListener('click', onOpenClick));

const onCloseClick = e => e.currentTarget.closest(itemSelector).classList.remove(activeClass);
close.forEach(n => n.addEventListener('click', onCloseClick));
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Steppp
На нативном js так
const btn = document.querySelector(`button[data-popup="popup--corn"]`)
const popup = document.querySelector(`.popup`)
btn.addEventListener(`click`, function() {
  popup.classList.add(`popup--active`)
})
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
25 апр. 2024, в 10:42
150000 руб./за проект
25 апр. 2024, в 10:41
2000 руб./за проект
25 апр. 2024, в 10:25
2000 руб./за проект