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

Uproszczony skrypt odpowiedzialny za dodanie class nie działa

Object Storage Arubacloud
0 głosów
184 wizyt
pytanie zadane 11 marca 2019 w JavaScript przez chmieluziomal Początkujący (450 p.)
var d = new Array(4);
d[0] = $('#main-dishes');
d[1] = $('#soups');
d[2]  = $('#side-dish');
d[3]  = $('#drinks');

for(i=0; i<=3; i++){
  d[i].click( function() { dish_check(d[i]); });
}

function dish_check(nr){
    for(i=0; i<=3; i++){
      d[i].removeClass("active");
    }
    nr.addClass("active");
}

Napisałem skrypt odpowiedzialny za pokazanie aktywnej kategorii, wykorzystujący bibliotekę jQuery. Dodaje on klasę .active do buttona, dzięki czemu button zmienia background-color oraz color. Wszystko było w porządku, więc zacząłem upraszczać kod. Niestety, ale uproszczony nie działa, a konsola pokazuje następujące błędy:

menu.js:16 Uncaught TypeError: Cannot read property 'addClass' of undefined
    at dish_check (menu.js:16)
    at HTMLButtonElement.<anonymous> (menu.js:9)
    at HTMLButtonElement.dispatch (jquery.min.js:2)
    at HTMLButtonElement.y.handle (jquery.min.js:2)

komentarz 11 marca 2019 przez pablop76 VIP (123,180 p.)
Prawie nie korzystasz z jQuery. Więc może napisz to w czystym JS?. Sprawdź za pomocą console.log() czym jest nr w twojej funkcji.
komentarz 11 marca 2019 przez chmieluziomal Początkujący (450 p.)
Korzystam z niego mało, gdyż dopiero zacząłem się go uczyć, ale powoli chcę go wdrażać do swojego kodu. Console.log() pokazuje wartość "undefined", więc to jest powód błędu. Tylko dlaczego zmienna nr nie zawiera posłanej do niej tablicy?
komentarz 11 marca 2019 przez pablop76 VIP (123,180 p.)
Czyli masz odpowiedź.
komentarz 11 marca 2019 przez chmieluziomal Początkujący (450 p.)
Tak, wiem co jest powodem. Pytanie brzmi: dlaczego zmienna nr nie zawiera tablicy do niej posłanej?

1 odpowiedź

0 głosów
odpowiedź 11 marca 2019 przez adrian17 Ekspert (344,860 p.)
wybrane 11 marca 2019 przez chmieluziomal
 
Najlepsza

Tak, wiem co jest powodem. Pytanie brzmi: dlaczego zmienna nr nie zawiera tablicy do niej posłanej?

Taka śmieszna cecha JSa:

for(i=0; i<=3; i++){
  setTimeout(function(){console.log(i);}, 100);
}

Wyświetli 4 razy "4", bo zmienna `i` po 100 milisekundach ma wartość 4.

Ale już to raczej powinno zadziałać:

for(i=0; i<=3; i++){
  let val = i;
  setTimeout(function(){console.log(val);}, 100);
}

 

komentarz 11 marca 2019 przez chmieluziomal Początkujący (450 p.)

Dziękuję bardzo za pomoc, teraz działasmiley

Podobne pytania

0 głosów
2 odpowiedzi 423 wizyt
0 głosów
1 odpowiedź 239 wizyt
pytanie zadane 25 lipca 2019 w JavaScript przez DanexZ Obywatel (1,270 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

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

...