UIEvent#
UIEvent.initUIEvent()#
Metoda initUIEvent()
inicjuje dane zdarzenie wartościami przekazanymi do metody.
Składnia#
Samo wywołanie i poszczególne jego części najlepiej objaśnić na zapisie składniowym:
uiEvent.initUIEvent(type, bubbles, cancelable, view, detail);
gdzie poszczególne człony oznaczają:
uiEvent
- zdarzenie będące obiektem kontekstu.type
- typ zdarzenia w postaci łańcucha znakowego. Może to być dowolny łańcuch znakowy (nawet pusty).bubbles
- boolowskietrue
oznacza, że zdarzenie zezwala na obsługę fazy bąbelkowania. Boolowskiefalse
zabrania bąbelkowania.cancelable
- boolowskietrue
oznacza, że domyślne akcje dla zdarzenia mogą zostać anulowane. Boolowskiefalse
nie zezwala na przerywanie domyślnych akcji.view
- obiekt okna lub wartośćnull
.detail
- szczegółowe informacje w postaci liczby całkowitej.
Algorytm wywołania metody initUIEvent(type, bubbles, cancelable, view, detail)
nie jest skomplikowany. Dla lepszego zrozumienia tematu prezentuję go w całości:
- Wykonaj inicjowanie z typem
type
, bąbelkowaniembubbles
oraz anulowaniemcancelable
na obiekcie kontekstu, a następnie ustaw kolejno jego właściwośćview
naview
orazdetail
nadetail
.
Inicjowanie zdarzeń metodą initUIEvent()
jest obowiązkowe w przypadku niezaufanych zdarzeń, przed ich wysłaniem za pomocą metody EventTarget.dispatchEvent()
, które utworzone zostały za pomocą polecenia Document.createEvent()
. Zdarzenia tworzone za pomocą konstruktora new UIEvent()
, i pochodnych, są inicjowane automatycznie. Także zaufane zdarzenia są inicjowane automatycznie przez daną implementacje.
W ramach uzupełnienia warto przeanalizować wady i zalety poszczególnych poleceń odpowiedzialnych za tworzenie niezaufanych zdarzeń.
Jeśli metoda initUIEvent()
jest wielokrotnie wywoływana przed wysłaniem zdarzenia, to pod uwagę brane jest ostatnie takie wywołanie. Jeśli metoda initUIEvent()
zostanie wywołana w trakcie propagacji zdarzenia (np. przez jakiś uchwyt zdarzenia), to nie powoduje ona żadnego efektu i musi zostać natychmiastowo zakończona.
Ze względów bezpieczeństwa zdarzenia modyfikowane przy użyciu metody initUIEvent()
muszą ustawiać wartość właściwości Event.isTrusted
na boolowskie false
.
Prosty przykład:
<script>
// Tworzymy nowe zdarzenie z domyślnymi wartościami
var uiEvent = document.createEvent("UIEvent");
document.write(uiEvent); // [object UIEvent]
document.write("<br>");
document.write(uiEvent.type); // "" - pusty łańcuch
document.write("<br>");
document.write(uiEvent.bubbles); // false
document.write("<br>");
document.write(uiEvent.cancelable); // false
document.write("<br>");
document.write(uiEvent.view); // null
document.write("<br>");
document.write(uiEvent.detail); // 0
document.write("<br>");
document.write(uiEvent.defaultPrevented); // false
document.write("<br>");
document.write(uiEvent.isTrusted); // false
document.write("<br>");
document.write(uiEvent.eventPhase); // 0
document.write("<br>");
document.write(uiEvent.timeStamp); // liczba całkowita z wartością zależną od chwili uruchomienia przykładu
document.write("<br>");
document.write(uiEvent.currentTarget); // null
document.write("<br>");
document.write(uiEvent.target); // null
document.write("<br><br>");
uiEvent.initUIEvent("piesek", true, true, window, 69); // inicjujemy zdarzenie własnymi wartościami
document.write(uiEvent); // [object UIEvent]
document.write("<br>");
document.write(uiEvent.type); // piesek
document.write("<br>");
document.write(uiEvent.bubbles); // true
document.write("<br>");
document.write(uiEvent.cancelable); // true
document.write("<br>");
document.write(uiEvent.view); // [object Window]
document.write("<br>");
document.write(uiEvent.detail); // 69
document.write("<br>");
document.write(uiEvent.defaultPrevented); // false
document.write("<br>");
document.write(uiEvent.isTrusted); // false
document.write("<br>");
document.write(uiEvent.eventPhase); // 0
document.write("<br>");
document.write(uiEvent.timeStamp); // liczba całkowita z wartością zależną od chwili uruchomienia przykładu
document.write("<br>");
document.write(uiEvent.currentTarget); // null
document.write("<br>");
document.write(uiEvent.target); // null
</script>
Metodę initUIEvent()
pozostawiono ze względu na polecenie Document.createEvent()
. Warto nadmienić, że po zakończeniu obsługi wszystkich faz zdarzenia może ono zostać ponownie wysłane. Dzięki metodzie initUIEvent()
można zmienić jego podstawowe parametry (typ, bąbelkowanie, anulowanie, obiekt okna i szczegółowe informacje), co byłoby niemożliwe przy wykorzystaniu podstawowych właściwości zdarzeń, ponieważ są one tylko do odczytu.
Interfejs Web IDL#
void initUIEvent(DOMString type, boolean bubbles, boolean cancelable, Window? view, long detail);