• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Dropdown menu JavaScript

Aruba Cloud - Virtual Private Server VPS
+1 głos
153 wizyt
pytanie zadane 20 sierpnia 2024 w JavaScript przez niezalogowany
zamknięte 20 sierpnia 2024

Witam, mam pytanie do bardzej doświadczonych kolegów, czy można moj kod napisać lepiej albo go ulepszyć ?

const dropdowns = document.querySelectorAll('.navbar-item.has-dropdown');

const removeActive = (ignored) => {
      dropdowns.forEach(drop => {
            if (drop !== ignored) {
                  drop.classList.remove('is-active');
            }
      });
};

dropdowns.forEach(dropdown => {
      dropdown.addEventListener('click', () => {
            removeActive(dropdown);
            dropdown.classList.toggle('is-active');
      });
});

 

komentarz zamknięcia: Znaleziono rozwiazanie

1 odpowiedź

+2 głosów
odpowiedź 20 sierpnia 2024 przez Comandeer Guru (606,480 p.)

Jeśli chodzi o sam kod, to można przypiąć jeden event listener, na cały kontener z menu, nie zaś na poszczególne rozwijalne elementy. Można to zrobić dzięki technice event delegation.

Natomiast warto też zadbać o to, żeby takie menu było dostępne. W tym zakresie brakuje przede wszystkim dwóch rzeczy: odpowiedniego markupu z ARIA i obsługi klawiaturą. Możesz spojrzeć na przykłady na blogu Adriana Roselliego albo w ARIA Practices. To pierwsze to bardziej takie dropdown menu do nawigacji po stronie, drugie – do jakichś akcji. Nie podałeś za bardzo kontekstu takiego menu, więc trudno stwierdzić, które bardziej pasuje.

komentarz 20 sierpnia 2024 przez niezalogowany
Dziekuję, jeszcze nie do końca rozumiem event delegation
komentarz 22 sierpnia 2024 przez VBService Ekspert (256,600 p.)
edycja 22 sierpnia 2024 przez VBService

Bez event delegation i bez forEach w removeActive.
Znajdź tylko ten element, który ewentualnie już posiada klasę is-active.

const dropdowns = document.querySelectorAll('.navbar-item.has-dropdown');

const removeActive = (skip) => {
  const active = document.querySelector('.navbar-item.is-active');
  if (active && active !== skip) {
    active.classList.remove('is-active');
  }
};

dropdowns.forEach(dropdown => {
  dropdown.addEventListener('click', () => {
    removeActive(dropdown);
    dropdown.classList.toggle('is-active');
  });
});

 

Podobne pytania

0 głosów
1 odpowiedź 351 wizyt
pytanie zadane 25 sierpnia 2019 w JavaScript przez niezalogowany
0 głosów
2 odpowiedzi 1,293 wizyt
0 głosów
1 odpowiedź 495 wizyt
pytanie zadane 20 lipca 2017 w HTML i CSS przez Alterwar Dyskutant (7,650 p.)

93,324 zapytań

142,323 odpowiedzi

322,389 komentarzy

62,652 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...