CustomEvent#

new CustomEvent()#

Interfejs CustomEvent może być wywoływany w roli konstruktora, dzięki czemu pozwala na bezpośrednie tworzenie nowych prywantych zdarzeń (syntetycznych) wprost z interfejsu. Przy tworzeniu nowego prywatnego zdarzenia od razu ustalany jest jego typ (pierwszy argument) oraz specyficzne cechy ustawiane za pomocą opcjonalnego słownika CustomEventInit (drugi argument).

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. #
var new_customEvent = new CustomEvent(type [, customEventInitDict]);

gdzie poszczególne człony oznaczają:

Algorytm wywołania konstruktora new CustomEvent(type, customEventInitDict) nie jest skomplikowany. Dla lepszego zrozumienia tematu prezentuję go w całości:

  1. Zwróć nowe zdarzenie za pomocą algorytmu tworzenia zdarzenia z typem type i słownikiem customEventInitDict (jeśli występuje).

Obiekt zwracany przez konstruktor new CustomEvent() implementuje interfejs CustomEvent, dlatego ma dostęp do wszystkich poleceń z tego interfejsu (oraz z kolejnych interfejsów w łańcuchu dziedziczenia). Warto podkreślić, że i opcjonalny słownik CustomEventInit dziedziczy ze słownika EventInit, dlatego ma dostęp do wszystkich jego członków w chwili przekazania do konstruktora.

Nowy obiekt prywatnego zdarzenia będzie miał ustawiane domyślne wartości dla wszystkich swoich właściwości i dodatkowo zostanie automatycznie zainicjowany zgodnie z przekazanymi argumentami przy jego wywołaniu, w przeciwieństwie do polecenia Document.createEvent(), dlatego może być od razu wysłany za pomocą metody EventTarget.dispatchEvent().

W ramach uzupełnienia warto przeanalizować wady i zalety poszczególnych poleceń odpowiedzialnych za tworzenie niezaufanych zdarzeń.

Ze względów bezpieczeństwa prywatne zdarzenia generowane przy użyciu konstruktora new CustomEvent() muszą ustawiać wartość właściwości Event.isTrusted na boolowskie false.

Prosty przykład:

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

	// Tworzymy nowe prywatne zdarzenie
	var customEvent1 = new CustomEvent("piesek");

	document.write(customEvent1); // [object CustomEvent]
	document.write("<br>");
	document.write(customEvent1.type); // piesek
	document.write("<br>");
	document.write(customEvent1.bubbles); // false
	document.write("<br>");
	document.write(customEvent1.cancelable); // false
	document.write("<br>");
	document.write(customEvent1.detail); // null
	document.write("<br>");
	document.write(customEvent1.defaultPrevented); // false
	document.write("<br>");
	document.write(customEvent1.isTrusted); // false
	document.write("<br>");
	document.write(customEvent1.eventPhase); // 0
	document.write("<br>");
	document.write(customEvent1.timeStamp); // liczba całkowita z wartością zależną od chwili uruchomienia przykładu
	document.write("<br>");
	document.write(customEvent1.currentTarget); // null
	document.write("<br>");
	document.write(customEvent1.target); // null

	document.write("<br><br>");

	// Tworzymy kolejne prywatne zdarzenie
	var customEvent2 = new CustomEvent("click", {
		bubbles: true,
		cancelable: true,
		detail: "husky"
	});

	document.write(customEvent2); // [object CustomEvent]
	document.write("<br>");
	document.write(customEvent2.type); // click
	document.write("<br>");
	document.write(customEvent2.bubbles); // true
	document.write("<br>");
	document.write(customEvent2.cancelable); // true
	document.write("<br>");
	document.write(customEvent2.detail); // "husky"
	document.write("<br>");
	document.write(customEvent2.defaultPrevented); // false
	document.write("<br>");
	document.write(customEvent2.isTrusted); // false
	document.write("<br>");
	document.write(customEvent2.eventPhase); // 0
	document.write("<br>");
	document.write(customEvent2.timeStamp); // liczba całkowita z wartością zależną od chwili uruchomienia przykładu
	document.write("<br>");
	document.write(customEvent2.currentTarget); // null
	document.write("<br>");
	document.write(customEvent2.target); // null

</script>

Na chwilę obecną wszystkie aktualne przeglądarki pozwalają na wywoływanie interfejsu CustomEvent w roli konstruktora, oczywiście z wyjątkiem IE11.

Interfejs Web IDL#

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
[Constructor(DOMString type, optional CustomEventInit customEventInitDict)], Exposed=(Window,Worker)]
interface CustomEvent : Event {
};

dictionary CustomEventInit : EventInit {
	any detail = null;
};

Specyfikacje i inne materiały#

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

CustomEvent (H1) new CustomEvent() (H2) Składnia (H3) Interfejs Web IDL (H3) Specyfikacje i inne materiały (H3)