Задать вопрос
mrerberg
@mrerberg
Yep

Как сделать так, чтобы popup при повторном клике закрывался?

Всем привет!

Проблема: как сделать так, чтобы показывался всегда 1 popup, а при повторном клике элемент скрывался?

Код:
https://codepen.io/anon/pen/LqPmGw
  • Вопрос задан
  • 155 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 3
Vlad_IT
@Vlad_IT Куратор тега JavaScript
Front-end разработчик
У вас есть toggle, но ей мешает то, что вы скрываете текущий кликнутый блок в closeAllPopups.
Вот так правильно https://codepen.io/anon/pen/Rvbyzg
Ответ написан
0xD34F
@0xD34F Куратор тега JavaScript
- .popup.visible {
+ .item.visible .popup {

const container = document.querySelector('.container');
const itemSelector = '.item';
const activeClass = 'visible';
const toggleItem = (item, items) =>
  items.forEach(n => n.classList[n === item ? 'toggle' : 'remove'](activeClass));


// делегирование, назначаем обработчик клика один раз для всех item'ов
container.addEventListener('click', function({ target: t }) {
  if (t.matches(itemSelector)) {
    toggleItem(t, this.querySelectorAll(itemSelector));
  }
});

// или, каждому item'у назначаем обработчик клика индивидуально
const items = container.querySelectorAll(itemSelector);
items.forEach(n => n.addEventListener('click', onClick));

function onClick({ target: t }) {
  if (this === t) {
    toggleItem(t, items);
  }
}
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
if(target.matches('.item')) {
  if (!target.children[0].classList.contains('visible')) {
    closeAllPopups();
  } 
  target.children[0].classList.toggle('visible');
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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