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

question-closed Javascript accordion

VPS Starter Arubacloud
0 głosów
171 wizyt
pytanie zadane 20 czerwca 2020 w JavaScript przez Pawel82 Użytkownik (740 p.)
zamknięte 21 czerwca 2020 przez Pawel82

Napisałem kod do obsługi accordion, konsola pokazuje błąd "panel is undefined". Co musze zrobić aby go poprawić?

let acc = document.getElementsByClassName('quest');

for (let i=0; i<acc.length; i++){
    acc[i].addEventListener('click', () => {
      
        /*Toggle between hiding and showing*/
        let panel = this.nextElementSibling;
        if(panel.style.display === 'block'){
            panel.style.display = 'none';
            
        } else {
            panel.style.display = 'block';
            
        }
        
    });
}

 

komentarz zamknięcia: Znaleziono odpowiedz

1 odpowiedź

+1 głos
odpowiedź 20 czerwca 2020 przez Comandeer Guru (604,400 p.)
wybrane 21 czerwca 2020 przez ScriptyChris
 
Najlepsza

Używasz funkcji strzałkowej, więc this jest window/undefined (w zależności od tego, czy jesteśmy w strict mode, czy nie). Zamiast niego powinieneś zastosować event.target.

komentarz 21 czerwca 2020 przez ScriptyChris Mędrzec (190,190 p.)

Gdyby this było undefined, to pojawił by się TypeError, że nie można odczytać property nextElementSibling z undefined. ;)

W tym przypadku this raczej wskazuje na obiekt window, a ten nie posiada property nextElementSibling - stąd do zmiennej panel jest przypisane undefined.

komentarz 21 czerwca 2020 przez Comandeer Guru (604,400 p.)

Meh, jak widzę kod ES6+, to z automatu już uznaję, że jest w strict mode :D Fakt, tutaj jest window.

komentarz 21 czerwca 2020 przez ScriptyChris Mędrzec (190,190 p.)

jak widzę kod ES6+, to z automatu już uznaję, że jest w strict mode

Czy to z przyzwyczajenia, że kod ES6+ coraz częściej jest uruchamiany jako moduł (wtedy z domyślnym strict mode)? :)

komentarz 21 czerwca 2020 przez Comandeer Guru (604,400 p.)
Od lat praktycznie nie miałem styczności z kodem w loose mode, nie tylko z powodu modułów, ale także wykorzystania bundlerów i transpilerów.

Podobne pytania

+1 głos
2 odpowiedzi 194 wizyt
pytanie zadane 10 stycznia 2021 w JavaScript przez Pawel82 Użytkownik (740 p.)
+1 głos
1 odpowiedź 224 wizyt
+1 głos
2 odpowiedzi 239 wizyt
pytanie zadane 4 lipca 2021 w JavaScript przez tirex Gaduła (4,430 p.)

92,832 zapytań

141,776 odpowiedzi

320,822 komentarzy

62,161 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

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!

...