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

JavaScript zmiana koloru komórki po kliknięciu. Pomocy!

Object Storage Arubacloud
0 głosów
6,200 wizyt
pytanie zadane 17 lutego 2019 w JavaScript przez Keczup Nowicjusz (120 p.)
edycja 18 lutego 2019 przez Arkadiusz Waluk

Witam. Mam problem. Dostałem za zadanie stworzyć stronę z elementami JS. Wszystko ładnie, pięknie ale mam problem z jedną rzeczą.

Muszę napisać skrypt dzięki któremu po kliknięciu na tekst w komórce tabeli zmieni kolor jej tła. Mógłby mi ktoś podpowiedzieć co należy zrobić aby to działało poprawnie? P.S. Dopiero się uczę pisania skryptów więc proszę o wyrozumiałość.

JS

  const tab = document.getElementById('tabelka');
  const td = tab.getElementsByTagName('td');
  for (let i=0; i<td.lenght; i++)
  {
    td[i].style.backgroundColor = "red";
    td[i].style.color = "yellow";
  }

 
HTML

<table id="tabelka">
    <tr>
      <td class="czarny">Czarny</td> <td id="czerwony"> Czerwony </td>
    </tr>
    <tr>
      <td class="zolty">Żółty</td> <td class="niebieski"> Niebieski </td>
    </tr>
    <tr>
      <td class="fioletowy">Fioletowy</td> <td class="bialy"> Biały </td>
    </tr>
  </table>
komentarz 17 lutego 2019 przez niezalogowany
a gdzie jest addEventListener()?

3 odpowiedzi

+1 głos
odpowiedź 17 lutego 2019 przez ThePolishPPK Bywalec (2,020 p.)

Możesz zrobić to z pomocą pętli, która ustawi działanie po kliknięciu (onclick).
Pętlę możesz zrobić na dwa sposoby:

Tak jak wyżej

var td = document.querySelectorAll("td"); // Możesz użyć swojego sposobu pobierania elementów
for (let i=0; i<td.lenght; i++) {
td[i].onclick = function () {
// Kod zmiany koloru
};
}

Lub drugim, nieco krótszym

var td = document.querySelectorAll("td"); // Możesz użyć swojego sposobu pobierania elementów
td.forEach(function (e) { // e -> element
e.onclick = function () {
// Kod zmiany koloru
};
});

Przy definiowaniu kolorów możesz skożystać z ułatwienia jakim jest zmienna this. Pozwala ona na zmienienie wartości elementu na którym wywołano funkcję.
Pomyśl jeszcze nad funkcją zmiany kolorów na poprzednie przycisku jeśli kliknąłeś inny.

+1 głos
odpowiedź 17 lutego 2019 przez pablop76 VIP (123,180 p.)

Wstaw kod w odpowiednie bloczki używając opcji edytora {...}

Jeżeli chodzi o Twoje pytanie to wystarczy nasłuchiwać zdarzenia click na elemencie tab, który pobrałeś. target obiektu zdarzenia to kliknięty element wewnątrz tab, więc kliknięta komórka tabelki. Należy się tylko zabezpieczyć przed kliknięciem samego table, co załatwi odfiltrowanie id="tabelka" za pomocą if()

0 głosów
odpowiedź 18 lutego 2019 przez Patryk L Bywalec (2,000 p.)
Ludzie on dopiero się uczy Więc nie sądzę żeby zrozumiał addEventListener nawet nie mówiąc o tym że pewnie nie miał tego na lekcji. Tekst w komórkach umieść w jakimś znaczniku, np <p></p> i dodaj do tego znacznika zdarzenie onclick czyli bedzie to wyglądało tak: <p onclick='zmien("KOLOR", idKomorki)>napis</p> (zamiast KOLOR zmień na angielską nazwę koloru.

Teraz w js tworzysz funkcje zmien(k,element) i w funkcji piszesz document.getElementById(element).style.backgroundColor = k;

 

Jeśli o to ci chodziło to chyba tyle (o ile autokorekta czegos nie zmieniła)
2
komentarz 18 lutego 2019 przez adrian17 Ekspert (344,860 p.)

Ludzie on dopiero się uczy Więc nie sądzę żeby zrozumiał addEventListener nawet nie mówiąc o tym że pewnie nie miał tego na lekcji

...zależy od kolejności? Czasem uczy się tylko addEventListener i w ogóle nie dotyka onclick.

(Tym bardziej, że na stronach z ostrym security policy w ogóle przeglądarka nie pozwala na <p onclick='...kod...'> i jedyną opcją jest addEventListener.)

komentarz 18 lutego 2019 przez Patryk L Bywalec (2,000 p.)
Założę się, że jest w technikum a program nauczania wszędzie mniej więcej taki sam i tego nie miałem a onclick już miałem
komentarz 18 lutego 2019 przez Arkadiusz Waluk Ekspert (287,950 p.)
Powiedziałbym nawet, że należy uczyć tylko addEventListener, a onclick pokazać i powiedzieć, że tak robić nie wolno. Założenie z góry, że ktoś dopiero co się uczy i dlatego trzeba mu podać kompletnie złe rozwiązanie, wydaje się co najmniej dziwne. A program technikum nikogo nie obchodzi. Jakby iść programem szkół to nawet nie chcę myśleć jak źle wszyscy wokół by programowali. Programowanie to nauka własna.

Chyba że podchodzimy do sprawy tak, aby tylko napisać coś co zadziała i zaliczyć zadanie w technikum. Zakładam jednak, że chce się czegoś naprawdę nauczyć.
komentarz 18 lutego 2019 przez Comandeer Guru (601,110 p.)

To, że ktoś się uczy, nie oznacza, że należy mu pokazywać najgorsze, przestarzałe i niepolecane rozwiązania. Poza tym powtarzanie jak mantrę, że uczący się nie zrozumieją podstaw jest dla mnie jednoznaczne z traktowaniem ich jak ćwierćinteligentów.

komentarz 18 lutego 2019 przez ScriptyChris Mędrzec (190,190 p.)

Powiedziałbym nawet, że należy uczyć tylko addEventListener, a onclick pokazać i powiedzieć, że tak robić nie wolno.

Z tym "nie wolno" bym aż tak nie przesadzał. A co, jeśli taka osoba trafi do projektu legacy, gdzie są tylko onclick'i? Pewnie ktoś z zespołu go naprostuje, ale moim zdaniem lepiej wytłumaczyć wszystkie możliwości, pokazać ich zalety oraz wady i wtedy określić, że jednych lepiej nie używać. Czasami jednak i tych zdeprecjonowanych lub uznanych za złe trzeba użyć, bo inne nie zadziałają lub spowodują zaburzenie spójności kodu, choćby ze względu na nietypowe środowisko działania aplikacji lub bardzo stary projekt.

1
komentarz 18 lutego 2019 przez Comandeer Guru (601,110 p.)

A ile juniorów trafia do projektów legacy? Trochę nie rozumiem popularności tego argumentu – normalnie jakby 90% projektów w webdevie to było legacy…

1
komentarz 18 lutego 2019 przez Arkadiusz Waluk Ekspert (287,950 p.)

@JSHolic, osobiście wolałbym uczyć wszystkich że "nie wolno", a jak ktoś trafi do takiego projektu to wtedy tam się dowie, że w takich specyficznych przypadkach się zdarza. Ale generalnie nie wolno i dopóki tam nie trafi (albo sam się tematem szerzej nie zainteresuje) będzie miał zakodowane, że tego się nie używa.

komentarz 18 lutego 2019 przez ScriptyChris Mędrzec (190,190 p.)
Nie wiem czy jest jakaś reguła - może poziom skomplikowania projektu. Ale z drugiej strony dlaczego Junior nie może tam trafić? Jeśli spełnia wymagania i jest zapotrzebowanie to chyba nic nie stoi na przeszkodzie.

Ja od Seniorów często słyszę, że w większych firmach łatwiej trafić na legacy projekt (zwłaszcza w outsourcingu), bo im większy klient tym bardziej zależy mu na stabilności oprogramowania i supporcie niż żeby cisnąć w nowości.

Podobne pytania

0 głosów
3 odpowiedzi 3,395 wizyt
0 głosów
1 odpowiedź 463 wizyt
pytanie zadane 8 marca 2020 w JavaScript przez eMe Początkujący (340 p.)
0 głosów
0 odpowiedzi 2,422 wizyt
pytanie zadane 4 lipca 2019 w JavaScript przez Ebay_05 Początkujący (400 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

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

...