20ivs
@20ivs
Пользователь пока ничего не рассказал о себе.

Как правильно дублировать блок в HTML\CSS\JS?

Добрый день, уважаемые знатоки!
Сразу прошу не пинать сильно, т.к. в HTML\CSS\JS не силен.

Вопрос следующий:
Есть пример выпадающего списка - https://codepen.io/zoite/pen/grOMKM
Я его экспортировал, открыл файл в блокноте, условно говоря, и скопировал имеющийся div, сделав тем самым два выпадающих списка. Вроде как все хорошо. Но если тыкнуть на первый, раскрываются сразу оба. UPD: при клике на второй так же раскрываются оба.
Как это побороть? Где и что надо поправить в коде, чтобы каждый список открывался по отдельности?
  • Вопрос задан
  • 1713 просмотров
Решения вопроса 2
Gvoz1
@Gvoz1
Frontend разработчик
TRen208
@TRen208
В JS пример есть такой код
var dropdown = $('.dropdown');
var item = $('.item');

item.on('click', function() {
  item.toggleClass('collapse');
  
  if (dropdown.hasClass('dropped')) {
    dropdown.toggleClass('dropped');
  } else {
    setTimeout(function() {
      dropdown.toggleClass('dropped');
    }, 150);
  }
})

То есть, при нажатии на один блок, открываются все. нужно его заменить на этот, должно сработать)

const dropdown = $('.dropdown');

dropdown.on('click', function() {
  $(this).children(".item").toggleClass('collapse');
  
  if ($(this).hasClass('dropped')) {
    $(this).toggleClass('dropped');
  } else {
      $(this).toggleClass('dropped');
  }
})



В чем была ошибка?
Потому что этот код
var dropdown = $('.dropdown');
var item = $('.item');

Содержит все список элементов с такими классами, а здесь:
item.toggleClass('collapse');
  
  if (dropdown.hasClass('dropped')) {
    dropdown.toggleClass('dropped');
  } else {
    setTimeout(function() {
      dropdown.toggleClass('dropped');
    }, 150);
  }

При нажатии все элементы из этого списка изменяются. Поэтому нужно использовать $(this) что-бы получить именно тот элемент, который был нажат.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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