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
- 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.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ąbelkowaniembubbles
oraz anulowaniemcancelable
na obiekcie kontekstu, a następnie ustaw kolejno jego właściwośćview
naview
,detail
nadetail
orazrelatedTarget
narelatedTarget
.
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);