Strona główna kursu

JavaScript - uchwyty zdarzeń dodawane przez skrypt

DZIAŁANIE:
Jakaś opcja
Jakaś opcja
Jakaś opcja
Jakaś opcja
Jakaś opcja
Jakaś opcja
Jakaś opcja
 

Kod:

Kurs JavaScript, Kurs Ajax, Kurs PHP

Ewentualne Objaśnienia:

Dotychczas dla każdego  elementu dodawaliśmy w znaczniku uchwyt zdarzenia typu onclick itd. Jednak nie jest to do końca dobre (nie mówię, że zawsze ponieważ :
    - brak pewnej przejrzystości kodu
    - jeśli chcemy na przykład tak jak w przykładzie wywołać tę samą funkcję dla zdarzenia onClick dla kilku pól checkbox musielibyśmy dla każdego z nich powtarzać ten sam kod
    - inne powodu, o których myślę kiedyś w trakcie dalszych lekcji powiem ;-)

Obecnie przeglądarki pozwalają na umieszczenie wywołań funkcji wewnątrz uchwytów danych zdarzeń, na przykład aby wywołać funkcję Akcja() po kliknięciu DIVa  o id="akcja" piszemy:
document.getElementById("akcja").onclick = Akcja;
Zauważ pewne różnice - onclick pisane bezwzględnie z małych liter (a nie onClick)  - jest to konieczne w momencie przypisywania funkcji do uchwytu zdarzenia. Druga rzecz jest taka, że funkcja akcja jest wywołana bez nawiasów() - wynika z tego, że nie przesyłamy do niej żadnych argumentów. Jednak nie ma się co martwić funkcja ta ma dostęp do danych zdarzenia, które ją wywołało.
No i po raz kolejny mamy tutaj różnice między przeglądarkami - chodzi dokładnie o dostęp do znanego już wam obiektu event - w IE obiekt ten jest automatycznie umieszczany w zmiennej event więc możemy sobie to dopisać to zmiennej  zapisem var mojeZdarzenie = event (w ciele funkcji) . W innych przeglądarkach zdarzenie jest po prostu przesyłane jako parametr do danej wywołanej funkcji, więc funkcja powinna w swej deklaracji zawierać parametr (wywołamy ją i tak bez niego w momencie przypisania do uchwytu).
Po uzyskaniu dostępu do obiektu event czasem przydaje się pobrać jakieś informacje o elemencie, który zdarzenie utworzył. w IE wykorzystujemy do tego właściwość srcElement . W innych przeglądarkach jest to target .

Może wydaje Ci się to skomplikowane, ale popatrzmy na nasz przykład :
- mamy formularz, a w nim 7 pól typu checkbox, każde pole ma jakąś tam sobie nazwę. Naszym celem jest wywołanie po kliknięciu w dane pole funkcji pokazAlert(). W tym celu piszemy sobie funkcję dodajZdarzenia() - pamiętaj o dodaniu onload="dodajZdarzenia();" w elemencie <body>
- funkcja ta 'pobiera' formularz oraz jego elementy potomne. Pętla przechodzi przez wszystkie te elementy i jeśli są to elementy typu input to przypisywana jest do jego uchwytu zdarzenia funkcja pokazAlert() [zwróć uwagę na wywołanie bez nawiasów mimo, iż funkcja zadeklarowana jest z parametrem]
- funkcja pokazAlert przyjmuje jako parametr zmienną zdarz -  dla przeglądarek innych niż IE jest to po prostu zdarzenie przesłane jako ten parametr. Zmienna pole będzie się odnosić do zaznaczonego elementu.
- jeśli warunek !zdarz jest spełniony (czyli zdarzenie nie zostało przesłane) czyli jest to zapewne przeglądarka IE do zmiennej zdarz przypisujemy obiekt event oraz korzystamy ze wspomnianej właściwości srcElement.
- w przeciwnym razie od razu korzystamy z właściwości target
- wyświetlamy alert, a w nim nazwę (atrybut name) zaznaczonego pola

Do tej lekcji zalecam poczytać ten oto tekst : http://ferrante.pl/2007/03/03/praktyczne-wprowadzenie-do-javascript-6/ .