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

[JS] Problem z AddEventListener

Object Storage Arubacloud
0 głosów
645 wizyt
pytanie zadane 19 czerwca 2018 w JavaScript przez Wisien Nowicjusz (200 p.)
edycja 19 czerwca 2018 przez Wisien

Witam!

Postanowiłem do kodu końcowego z odcinka 5 kursu JS Pana Mirosława Zelenta dodać możliwość wybrania dowolnej ilości par kart na planszy. Objaw błędu jest następujący: po wyświetleniu strony w przeglądarce i wybraniu rozmiaru planszy karty nie reagują na kliknięcie (zupełnie jakby nasłuchiwanie kliknięcia nie zostało dodane), a konsola nie wyświetla błędów. Stąd uważam, że problem jest w tym fragmencie kodu: 

for (var i = 0; i < cardsAmount; i++)
    {
        $('.board').html($('.board').html() + '<div class="card" id="c' + i + '"></div> '); //dodawanie kart na planszę
        cardTab.push(document.getElementById('c' + i )); //dodawanie obiektu karty do tablicy
        cardTab[i].addEventListener("click", function() { revealCard(i); }); //nasłuchiwanie karty
    }

cardsAmount - liczba kart przekazywana do funkcji budującej planszę (roboczo onclick'iem)

Czy ktoś jest w stanie powiedzieć mi gdzie popełniam błąd/dać inny pomysł na zrealizowanie nasłuchiwania kliknięcia karty.

Pełny kod: https://pastebin.com/HHgcuXFE

komentarz 19 czerwca 2018 przez pablop76 VIP (123,120 p.)
Używasz jquery więc bądź konsekwentny.

document.getElementById('c' + i )   -> $( '#c' + i )

.addEventListener("click", function() -> .on('click' function(){...})
komentarz 19 czerwca 2018 przez Wisien Nowicjusz (200 p.)
Masz rację. Lepiej być konsekwentnym. To jednak nie rozwiązuje problemu.
komentarz 19 czerwca 2018 przez pablop76 VIP (123,120 p.)
Dlatego napisałem w komentarzu. Nie mam czasu zajrzeć teraz do kodu. Sprawdź jaki  obiekt zdarzenie przekazywany jest do funkcji.

1 odpowiedź

+1 głos
odpowiedź 19 czerwca 2018 przez cz3ran Stary wyjadacz (13,380 p.)
wybrane 19 czerwca 2018 przez ScriptyChris
 
Najlepsza

Prawdopodobnie elementy, do których chcesz podpiąć listenery generowane są dynamicznie (z poziomu JS), więc nie podepniesz do nich listenerów. Spróbuj podpiąć eventlistener pod document i na evencie sprawdzaj czy kliknięty element posiada Twoją klasę/id. W czystym JS bedzie to mniej więcej wyglądało następująco:

document.addEventListener('click', (e) => {
    if (e.target && e.target.id== 'twójID') {
        // wykonaj akcję
    }
}

Jeżeli chcesz sprawdzić klasę to wtedy e.target.classList.contains('twoja_klasa').

komentarz 19 czerwca 2018 przez Wisien Nowicjusz (200 p.)
Wielkie dzięki! Gdybyś nie powiedział mi, że do elementów dynamicznych nie da się podpiąć listenerów to siedział bym nad tym jeszcze kilka dni po których bym się poddał.
komentarz 20 czerwca 2018 przez cz3ran Stary wyjadacz (13,380 p.)
Cieszę się że mogłem pomóc ;)

Podobne pytania

0 głosów
1 odpowiedź 218 wizyt
pytanie zadane 20 marca 2018 w JavaScript przez OdsetekGlupoty Pasjonat (15,360 p.)
0 głosów
0 odpowiedzi 249 wizyt
pytanie zadane 11 lutego 2017 w JavaScript przez mowmiheniek Stary wyjadacz (11,900 p.)
0 głosów
1 odpowiedź 367 wizyt

92,536 zapytań

141,377 odpowiedzi

319,452 komentarzy

61,922 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!

...