Jak obsłużyć event dla kilku elementów

Dział poświęcony JavaScriptowi - tworzeniu dynamicznym stron WWW.
mario88
Stały Bywalec
Stały Bywalec
Posty: 128
Dołączył(a): sobota, 14 marca 2015, 19:04

Jak obsłużyć event dla kilku elementów

Post przez mario88 »

Witam,
mam taki problem że chciałbym obsłużyć klikanie w kilka elementów i żeby dla każdego odpaliło się to samo zdarzenie.

Gdy kliknę na nagłówek obojętnie który, to ma zniknąć jego sąsiedni div.

Moja próba rozwiązania tego: https://jsfiddle.net/8fhcs0o7/5/

Kiedyś udało mi się coś takiego osiągnąć ale nie pamiętam jak to zrobiłem i za nic nie mogę sobie przypomnieć.
Proszę o pomoc lub wskazówkę.

Pozdrawiam
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Jak obsłużyć event dla kilku elementów

Post przez Morfidon »

Hej,

W zmiennej headings masz tablicę, a nie poj. zmienną. Przejdź przy pomocy po wszystkich elementach tablicy i będzie ok :)

Pozdrawiam,

Arek
mario88
Stały Bywalec
Stały Bywalec
Posty: 128
Dołączył(a): sobota, 14 marca 2015, 19:04

Re: Jak obsłużyć event dla kilku elementów

Post przez mario88 »

Udało mi się osiągnąć to co chciałem dzięki Twojej wskazówce:

https://jsfiddle.net/1xtmt92e/2/

W pętli for te przypisanie eventu działa tak że parser przeleci przez kod i przypisze każdemu elementowi z tablicy ten event? Myślałem że to nasłuchiwanie dzieje się w czasie rzeczywistym i że nie można go przypisać i on już zostanie z elementem na stałe :)
Po drugie tego if'a napisałem metodą prób i błędów bo nie za bardzo rozumiem jego logikę, chyba tu coś działa inaczej ze względu na nasłuchiwacz w tym if'e? Gdyby nie klikanie w element ten if wyglądałby inaczej prawda?
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Jak obsłużyć event dla kilku elementów

Post przez Morfidon »

Bo on zostanie z elementem na stałe :) Jak się wczyta strona to dodasz event dla wszystkich elementów.

Nie powinieneś usuwać całej klasy, a wyłącznie tylko część class :-) pokombinuj z substring :-)
mario88
Stały Bywalec
Stały Bywalec
Posty: 128
Dołączył(a): sobota, 14 marca 2015, 19:04

Re: Jak obsłużyć event dla kilku elementów

Post przez mario88 »

Czemu usuwanie całej klasy jest złe? :)
Lepiej zastosować:

Code: Zaznacz cały

    if(this.nextElementSibling.className == ""){
      this.nextElementSibling.className = "ukryty";
    } else {
      this.nextElementSibling.className = "";
    }
?
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Jak obsłużyć event dla kilku elementów

Post przez Morfidon »

className też jest złe. Zastanów się co by się stało jeśli ten element miałby jakieś inne klasy, które nadawałaby wygląd temu elementowi? ;)
mario88
Stały Bywalec
Stały Bywalec
Posty: 128
Dołączył(a): sobota, 14 marca 2015, 19:04

Re: Jak obsłużyć event dla kilku elementów

Post przez mario88 »

A coś takiego?
https://jsfiddle.net/1xtmt92e/4/
Teraz klas nie rusza :)
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Jak obsłużyć event dla kilku elementów

Post przez Morfidon »

Teraz jest ok :) Z klasami też możesz to zrobić, tylko wtedy musisz pamiętać o tym aby usunąć część 'stringa' do tego służą metody z lekcji 50 :)
Post Reply