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

question-closed Javascript accordion

Cloud VPS
0 głosów
248 wizyt
pytanie zadane 20 czerwca 2020 w JavaScript przez niezalogowany
zamknięte 21 czerwca 2020

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ź

0 głosów
odpowiedź 20 czerwca 2020 przez Comandeer Guru (607,060 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 (607,060 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 (607,060 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 246 wizyt
pytanie zadane 10 stycznia 2021 w JavaScript przez niezalogowany
+1 głos
1 odpowiedź 251 wizyt
+1 głos
2 odpowiedzi 292 wizyt
pytanie zadane 4 lipca 2021 w JavaScript przez tirex Gaduła (4,430 p.)

93,457 zapytań

142,452 odpowiedzi

322,722 komentarzy

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

Kursy INF.02 i INF.03
...