FocusEvent#
FocusEvent.initFocusEvent()#
Metoda initFocusEvent() 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:
focusEvent.initFocusEvent(type, bubbles, cancelable, view, detail, relatedTarget);
gdzie poszczególne człony oznaczają:
focusEvent- 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- boolowskietrueoznacza, że zdarzenie zezwala na obsługę fazy bąbelkowania. Boolowskiefalsezabrania bąbelkowania.cancelable- boolowskietrueoznacza, że domyślne akcje dla zdarzenia mogą zostać anulowane. Boolowskiefalsenie zezwala na przerywanie domyślnych akcji.view- obiekt okna lub wartośćnull.detail- szczegółowe informacje w postaci liczby całkowitej.relatedTarget- dodatkowy obiekt, który jest powiązany z nowym zdarzeniem.
Algorytm wywołania metody initFocusEvent(type, bubbles, cancelable, view, detail, relatedTarget) nie jest skomplikowany. Dla lepszego zrozumienia tematu prezentuję go w całości:
- Wykonaj inicjowanie z typem
type, bąbelkowaniembubblesoraz anulowaniemcancelablena obiekcie kontekstu, a następnie ustaw kolejno jego właściwośćviewnaview,detailnadetailorazrelatedTargetnarelatedTarget.
Inicjowanie zdarzeń metodą initFocusEvent() 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 FocusEvent(), 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 initFocusEvent() jest wielokrotnie wywoływana przed wysłaniem zdarzenia, to pod uwagę brane jest ostatnie takie wywołanie. Jeśli metoda initFocusEvent() 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 initFocusEvent() 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 focusEvent = document.createEvent("FocusEvent");
document.write(focusEvent); // [object FocusEvent]
document.write("<br>");
document.write(focusEvent.type); // "" - pusty łańcuch
document.write("<br>");
document.write(focusEvent.bubbles); // false
document.write("<br>");
document.write(focusEvent.cancelable); // false
document.write("<br>");
document.write(focusEvent.view); // null
document.write("<br>");
document.write(focusEvent.detail); // 0
document.write("<br>");
document.write(focusEvent.relatedTarget); // null
document.write("<br>");
document.write(focusEvent.defaultPrevented); // false
document.write("<br>");
document.write(focusEvent.isTrusted); // false
document.write("<br>");
document.write(focusEvent.eventPhase); // 0
document.write("<br>");
document.write(focusEvent.timeStamp); // liczba całkowita z wartością zależną od chwili uruchomienia przykładu
document.write("<br>");
document.write(focusEvent.currentTarget); // null
document.write("<br>");
document.write(focusEvent.target); // null
document.write("<br><br>");
focusEvent.initFocusEvent("piesek", true, true,
window, 69, document.documentElement); // inicjujemy zdarzenie własnymi wartościami
document.write(focusEvent); // [object FocusEvent]
document.write("<br>");
document.write(focusEvent.type); // piesek
document.write("<br>");
document.write(focusEvent.bubbles); // true
document.write("<br>");
document.write(focusEvent.cancelable); // true
document.write("<br>");
document.write(focusEvent.view); // [object Window]
document.write("<br>");
document.write(focusEvent.detail); // 69
document.write("<br>");
document.write(focusEvent.relatedTarget); // [object HTMLHtmlElement]
document.write("<br>");
document.write(focusEvent.defaultPrevented); // false
document.write("<br>");
document.write(focusEvent.isTrusted); // false
document.write("<br>");
document.write(focusEvent.eventPhase); // 0
document.write("<br>");
document.write(focusEvent.timeStamp); // liczba całkowita z wartością zależną od chwili uruchomienia przykładu
document.write("<br>");
document.write(focusEvent.currentTarget); // null
document.write("<br>");
document.write(focusEvent.target); // null
</script>Metodę initFocusEvent() 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 initFocusEvent() można zmienić jego podstawowe parametry (typ, bąbelkowanie, anulowanie, obiekt okna, szczegółowe informacje i powiązany obiekt), co byłoby niemożliwe przy wykorzystaniu podstawowych właściwości zdarzeń, ponieważ są one tylko do odczytu.
Na chwilę obecną jedynie w przeglądarce IE11 wszystko działa prawidłowo. Firefox nie obsługuje polecenia Document.createEvent("FocusEvent"), Chrome z kolei obsługuje, ale nie implementuje metody initFocusEvent().
Interfejs Web IDL#
void initFocusEvent(DOMString type, boolean bubbles, boolean cancelable, Window? view, long detail, EventTarget? relatedTarget);