как повесить обработчик на коллекцию элементов, которая возвращается к функции querySelectorAll?

#javascript #drop-down-menu

#javascript #выпадающее меню

Вопрос:

Я хочу сделать выпадающее меню при нажатии на itemDropDown, работает только первое, а остальные нет, querySelectorAll выдает ошибку, что я делаю не так? Я прикрепил jsfidle, чтобы вы могли помочь, пожалуйста, не обращайте внимания на scss. http://jsfiddle.net/rhy7pv1f/46 /

 const itemDropDown = document.querySelectorAll('.menu__list-item.drop__down'),
            itemList = document.querySelector('.drop__down-list');


itemDropDown.forEach((buttonItem) => {
  buttonItem.addEventListener('click', () => {
    itemList.classList.toggle('active');
  })
})
 

Ответ №1:

Все ваши обработчики переключают класс того itemList , который вы создаете в начале.

Вам нужно настроить таргетинг на соответствующий список для каждой кнопки.

 const itemDropDown = document.querySelectorAll('.menu__list-item.drop__down');


itemDropDown.forEach((buttonItem) => {
  const relatedDropdownList = buttonItem.querySelector('.drop__down-list');
  const dropDownLink = buttonItem.querySelector('.menu__list-link');

  dropDownLink.addEventListener('click', () => {
    relatedDropdownList.classList.toggle('active');
  });

})
 

Обновлен fiddle на http://jsfiddle.net/gaby/k7b0m95a/5 /