EventListener#

EventListener.handleEvent()#

Metoda handleEvent() jest częścią obiektu, który jest obowiązkowym argumentem przekazywanym w czasie rejestrowania lub usuwania uchwytów zdarzeń. To ona właśnie stanowi funkcję zwrotną dla danego uchwytu zdarzenia.

Interfejs EventListener jest specyficzny ponieważ jest typu zwrotnego (callback interface). W praktyce oznacza to tyle, że nie istnieje żadna gotowa metoda pozwalająca utworzyć taki obiekt. To my musimy utworzyć dowolny obiekt JS i rozszerzyć go o pewne elementy (w tym wypadku metodą o nazwie handleEvent). W praktyce całość można rozwiązać na kilka sposobów, dlatego w dalszej części przedstawię ich najpopularniejsze warianty.

Składnia#

Samo wywołanie i poszczególne jego części najlepiej objaśnić na zapisie składniowym:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
// Wariant obiektowy (obiekt klasyczny)
var callback1 = {
	handleEvent: function(e){
		kod funkcji
	}
};

// Wariant funkcyjny (obiekt funkcyjny)
var callback2 = function(e){
	kod funkcji
};

gdzie poszczególne człony oznaczają:

Najlepiej omówić wszystko od podstaw jeszcze raz. W czasie rejestrowania lub kasowania uchwytu zdarzenia za pomocą metod Event.addEventListener() i Event.removeEventListener() musimy przekazać trzy argumenty: typ, funkcję zwrotną oraz przechwytywanie. Z typem (łańcuch znakowy) i przechwytywaniem (wartość boolowska) nie ma żadnego problemu. Inaczej wygląda sytuacja w przypadku funkcji zwrotnej. W zasadzie należy tutaj przekazać obiekt, który będzie można w odpowiedniej chwili wywołać. Obiekt ten należy utworzyć samodzielnie przy wykorzystaniu podstawowych poleceń danego środowiska uruchomieniowego.

Zgodnie z zapisem składniowym umieszczonym wyżej można to zrobić na dwa podstawowe sposoby:

Obydwa sposoby dają dużą swobodę. Do metod tworzących i usuwających nasłuchy zdarzeń, jako wywołanie zwrotne, można bezpośrednio przekazywać obiekty anonimowe, funkcje anonimowe, wyrażenia funkcji jak i deklaracje funkcji. Nie ma w tej kwestii żadnych ograniczeń. Należy mieć jedynie na uwadze, że stosowanie anonimowych danych może utrudniać późniejsze usuwanie nasłuchów zdarzeń.

Prosty przykład:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
<!DOCTYPE html>
<html>

<head>

	<script>

		// Uruchom po całkowitym załadowaniu dokumentu
		window.onload = function(){

			var button = document.getElementById("press");
			var info = document.getElementById("info");

			var test1 = function(e){

				info.innerHTML += "Pierwszy uchwyt dla przycisku (e.type: " + e.type + ")." + "<br><br>";

			};

			function test2(e){

				info.innerHTML += "Drugi uchwyt dla przycisku (e.type: " + e.type + ")." + "<br><br>";

			}

			var test3 = {

				handleEvent: function(e){

					info.innerHTML += "Trzeci uchwyt dla przycisku (e.type: " + e.type + ")." + "<br><br>";

				}

			};

			// Uchwyty z referencjami do funkcji zwrotnej
			button.addEventListener("click", test1, false);
			button.addEventListener("click", test2, false);
			button.addEventListener("click", test3, false);

			// Uchwyt z anonimową funkcją zwrotną
			button.addEventListener("click", function(e){

				info.innerHTML += "Czwarty uchwyt dla przycisku (e.type: " + e.type + ")." + "<br><br>";

			}, false);

			// Uchwyt z anonimowym obiektem (posiada metodę zwrotną)
			button.addEventListener("click", {

				handleEvent:	function(e){

					info.innerHTML += "Piąty uchwyt dla przycisku (e.type: " + e.type + ")." + "<br><br>";

				}

			}, false);

		}

	</script>

</head>

<body>

	<p>Kliknij w przycisk by wywołać procedury obsługi wielu uchwytów zdarzeń.</p>
	<input id="press" type="button" value="Kliknij mnie!">

	<p style="color: blue;">Szczegółowe informacje:</p>
	<p id="info"></p>

</body>

</html>

Interfejs Web IDL#

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
void handleEvent(Event event);

Specyfikacje i inne materiały#

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

EventListener (H1) EventListener.handleEvent() (H2) Składnia (H3) Interfejs Web IDL (H3) Specyfikacje i inne materiały (H3)