ERROR - is not a function

ERROR - is not a function
KB
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 12
0

Pytanko. Dlaczego dostaje error - Uncaught TypeError: navItems.addEventListener is not a function

https://jsfiddle.net/18po5m7n/

Freja Draco
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3394
3

navItems = document.querySelectorAll('.nav-items');
Tworzy kolekcję obiektów. Nie możesz zrobić addEventListener na kolekcji, jedynie na obiekcie.

SA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1452
0
Kopiuj
Bezsensem było by "zbiernie" tego pojedynczo (dodawanie klas do kazdego elementu) 

Dobrze, że zauważasz bezsens tego. Jeszcze lepiej, gdybyś w takich sytuacjach (tj. powtarzanie podobnych czynności) od razu myślał "pętla!"

SA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1452
1

Odpowiadaj w postach.

Kopiuj
Zaskocze Cie. POmysłałem. Problemem jest iż nie wiem jak ja napisać heh. Pewnie trzeba utworzyć zmienną, do której pętla 'ściągnie' wszystkie elementy?? 

Mając już kolekcję elementów z querySelectorAll możesz przeiterować się po nich za pomocą forEach. Jakbym napisał kod byłoby za łatwo, sorry. To musi mieć jakiś aspekt dydaktyczny.

KB
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 12
0

No tak, w sumie racja.

KB
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 12
0

Coś w ten deseń?

Kopiuj
const navItems = document.querySelectorAll('.nav-item');

for (i = 0; i < navItems.length; ++i ) {
    console.log("forEach worked");
}
KB
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 12
0

Mam takie rozwiązanie - https://jsfiddle.net/yg0dem12/

Freja Draco
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3394
0

Oba powyższe rozwiązania są poprawne. forEach jest niby bardziej eleganckie, ale ostatnio czytam, że:
"Warning: JavaScript 1.6's for-each-in loops are deprecated; consider using ES6 for-of instead"
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/For-each-in_loops_are_deprecated

KB
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 12
0

OK, ale teraz w tym 1 rozwiązaniu należy w inny sposób napisać addEventListener itu niestety utknąłem.

Jakaś podpowiedź?

Freja Draco
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3394
1

navItems[i].addEventListener (...)

KB
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 12
0

Gracjas :)

SI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 136
3

Jeśli chodzi o eventy na wielu obiektach, pamiętaj, że jest jeszcze coś takiego jak event delegation

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.