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

Chowające się menu po kliknięciu w odnośnik - HTML/JS

Object Storage Arubacloud
+1 głos
335 wizyt
pytanie zadane 17 stycznia 2022 w JavaScript przez paweleq96 Nowicjusz (160 p.)

Witam,

Próbuję zrobić, aby responsywne menu się zamykało po kliknięciu w odnośnik "a". Klikając w pierwszy link, menu się zamyka, ale jak klikam w kolejne to pozostaje widoczne. Próbowałem też const nava = document.querySelectorAll('.nav_links a'); Ale wtedy menu nie zamykało się nawet po kliknięciu w pierwszy link.

const navSlide = () => {
    const burger = document.querySelector('.nav_links_menu');
    const nav = document.querySelector('.nav_links');
    const nava = document.querySelector('.nav_links a');

    burger.addEventListener('click', () => {
        nav.classList.toggle('nav_active');
        //Burger Animation
        burger.classList.toggle('toggle');
    })

    nava.addEventListener('click', () => {
        nav.classList.toggle('nav_active');
        burger.classList.toggle('toggle');
    })
}

 

2 odpowiedzi

0 głosów
odpowiedź 17 stycznia 2022 przez VBService Ekspert (252,740 p.)
wybrane 17 stycznia 2022 przez paweleq96
 
Najlepsza

document.querySelectorAll zwraca listę elementów html (NodeList), więc jak chcesz dodać do nich EventListener-a po prostu wykonaj iterację.

 

const nava = document.querySelectorAll('.nav_links a');
nava.forEach((item) => {
  item.addEventListener('click', () => {
    nav.classList.toggle('nav_active');
    burger.classList.toggle('toggle');
  });
});

 

komentarz 17 stycznia 2022 przez paweleq96 Nowicjusz (160 p.)
Dzięki, teraz bardziej rozumiem działanie querySelectorAll.
komentarz 18 stycznia 2022 przez VBService Ekspert (252,740 p.)

Dodając parametr e (event) możesz "zobaczyć", który element z listy został "kliknięty"

 

const nava = document.querySelectorAll('.nav_links a');
nava.forEach((item) => {
  item.addEventListener('click', (e) => {
    // e.target.id, e.target.classList itd.
    console.log(e.target);
  });
});
const nava = document.querySelectorAll('.nav_links a');
nava.forEach((item) => {
  item.addEventListener('click', ({target}) => {
    // target.id, target.classList itd.
    console.log(target);
  });
});

 

What exactly is the parameter e (event) and why pass it to JavaScript functions?

+1 głos
odpowiedź 17 stycznia 2022 przez ScriptyChris Mędrzec (190,190 p.)

Metoda querySelector zwraca jeden element, więc jeśli podepniesz się pod niego na event, to nie złapie on eventów z innych elementów (chyba, że przez delegację, co nie dotyczy elementów w relacji rodzeństwa). Korzystając z querySelectorAll otrzymujesz listę elementów, więc chcąc podpiąć się na każdy z nich potrzebujesz użyć pętli, albo przynajmniej odnieść się do konkretnego elementu przez jego indeks. Możesz alternatywnie skorzystać ze wspomnianego mechanizmu delegacji eventów podpinając się na wspólnego rodzica (lub przodka) linków i w listenerze zmienić klasę klikniętemu linkowi.

Podobne pytania

0 głosów
2 odpowiedzi 88 wizyt
pytanie zadane 13 stycznia 2023 w HTML i CSS przez dezzy Nowicjusz (150 p.)
0 głosów
1 odpowiedź 455 wizyt
pytanie zadane 8 marca 2020 w JavaScript przez eMe Początkujący (340 p.)

92,550 zapytań

141,394 odpowiedzi

319,522 komentarzy

61,935 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...