Как реализовать всплывающий список при нажатии на кнопку?

Изображение к вопросу
  • 6 сентября 2023 г. 11:27
Ответы на вопрос 2
Проблема заключается в том, что вы используете конкретные селекторы для определения элементов, которые должны показываться или скрываться при нажатии кнопки. Вы должны изменить ваш подход и использовать обобщенные селекторы для всех подменю. 

Вот пример, как вы можете изменить ваш код для работы с различными подменю:

```javascript
const cartsBody = document.querySelector('.card-body');
const mobiCategories = document.querySelector('.mobile-categories');

if (cartsBody) {
  cartsBody.addEventListener("click", function (e) {
    document.body.classList.toggle('_lock');
    cartsBody.classList.toggle('_active');
    mobiCategories.classList.toggle('_active');

    // Скрываем все другие подменю, кроме текущего
    const otherMenus = document.querySelectorAll('.mobile-categories');
    otherMenus.forEach(function(menu) {
      if (menu !== mobiCategories) {
        menu.classList.remove('_active');
      }
    });
  });
}

const cartsMobiBtns = document.querySelectorAll('.category-btn');
const mobiCategoriesDepartments = document.querySelector('.categories__main');

if (cartsMobiBtns) {
  cartsMobiBtns.forEach(function(btn) {
    btn.addEventListener("click", function (e) {
      btn.classList.toggle('_active');
      mobiCategoriesDepartments.classList.toggle('_active');

      // Скрываем все другие подменю, кроме текущего
      const otherBtns = document.querySelectorAll('.category-btn');
      otherBtns.forEach(function(otherBtn) {
        if (otherBtn !== btn) {
          otherBtn.classList.remove('_active');
        }
      });
    });
  });
}
```

В этом коде мы используем `querySelectorAll` для выбора всех кнопок и все подменю, и затем перебираем их с помощью `forEach`. Затем мы проверяем, является ли текущий элемент равным текущему событию, и если нет, то мы удаляем класс `_active` у этого элемента, чтобы скрыть его. Это позволяет нам работать с различными подменю и кнопками.
Прочитайте документацию по методам Document.querySelector() и Document.querySelectorAll(). Понимая разницу между этими двумя методами, выберите тот, который лучше подходит для вашей задачи.
Похожие вопросы