Wydarzenia DOM - DOM events
Zdarzenia DOM (Document Object Model) są sygnałem, że coś się wydarzyło lub coś się dzieje i może być wywołane przez interakcje użytkownika lub przeglądarkę. Języki skryptowe po stronie klienta, takie jak JavaScript , JScript , ECMAScript , VBScript i Java mogą rejestrować różne programy obsługi zdarzeń lub detektory w węzłach elementów wewnątrz drzewa DOM , na przykład w dokumentach HTML , XHTML , XUL i SVG .
Przykłady wydarzeń DOM:
- Gdy użytkownik kliknie myszą
- Po załadowaniu strony internetowej
- Po załadowaniu obrazu
- Gdy mysz porusza się po elemencie
- Gdy pole wejściowe zostanie zmienione
- Po przesłaniu formularza HTML
- Gdy użytkownik naciśnie klawisz
Historycznie, podobnie jak DOM, modele zdarzeń używane przez różne przeglądarki internetowe miały pewne istotne różnice. Spowodowało to problemy ze zgodnością. Aby temu zaradzić, model wydarzenia został ustandaryzowany przez World Wide Web Consortium (W3C) w DOM Level 2.
Wydarzenia
Zdarzenia HTML
Wspólne wydarzenia
Istnieje ogromna kolekcja zdarzeń, które mogą być generowane przez większość węzłów elementów:
- Zdarzenia myszy .
- Zdarzenia klawiatury .
- Zdarzenia ramki/obiektu HTML.
- Zdarzenia formularza HTML.
- Zdarzenia interfejsu użytkownika.
- Zdarzenia mutacji (powiadomienie o wszelkich zmianach w strukturze dokumentu).
- Zdarzenia postępu (używane przez XMLHttpRequest , File API,).
Zauważ, że powyższa klasyfikacja zawodów nie jest dokładnie taka sama jak klasyfikacja W3C.
Kategoria | Rodzaj | Atrybut | Opis | Bąbelki | Możliwość anulowania |
---|---|---|---|---|---|
Mysz | Kliknij | na kliknięcie | Pożary, gdy przycisk urządzenia wskazującego zostanie kliknięty nad elementem. Kliknięcie definiuje się jako wciśnięcie i przesunięcie myszy w tym samym miejscu na ekranie. Sekwencja tych wydarzeń to:
|
tak | tak |
dblklik | ondblkliknij | Pożary po dwukrotnym kliknięciu przycisku urządzenia wskazującego nad elementem | tak | tak | |
w dół myszy | w dół myszy | Pożary, gdy przycisk urządzenia wskazującego zostanie naciśnięty nad elementem | tak | tak | |
w górę myszy | onmouseup | Pożary, gdy przycisk urządzenia wskazującego zostanie zwolniony nad elementem | tak | tak | |
najechanie kursorem myszy | po najechaniu myszą | Pożary, gdy urządzenie wskazujące zostanie przesunięte na element | tak | tak | |
ruch myszą | onmousemove | Pożary, gdy urządzenie wskazujące jest przesuwane, gdy znajduje się nad elementem | tak | tak | |
wygaszenie myszy | onmouseout | Pożary, gdy urządzenie wskazujące jest odsunięte od elementu | tak | tak | |
dragstart | ondragstart | Wystrzeliwany na elemencie po rozpoczęciu przeciągania. | tak | tak | |
ciągnąć | ondrag | To zdarzenie jest uruchamiane w źródle przeciągania, to jest w elemencie, w którym wywołano funkcję dragstart, podczas operacji przeciągania. | tak | tak | |
dragenter | ondragenter | Uruchamiany, gdy mysz zostanie po raz pierwszy przesunięta nad element podczas przeciągania. | tak | tak | |
dragleave | ondragleave | To zdarzenie jest uruchamiane, gdy mysz opuści element podczas przeciągania. | tak | Nie | |
dragover | ondragover | To zdarzenie jest uruchamiane, gdy mysz jest przesuwana nad elementem podczas przeciągania. | tak | tak | |
upuszczać | ondrop | Zdarzenie drop jest wywoływane w elemencie, w którym następuje upuszczenie pod koniec operacji przeciągania. | tak | tak | |
dragend | ondragend | Źródło przeciągania otrzyma zdarzenie dragend po zakończeniu operacji przeciągania, niezależnie od tego, czy zakończyła się powodzeniem, czy nie. | tak | Nie | |
Klawiatura | klawisz | onkeydown | Pożary przed naciśnięciem klawisza, po naciśnięciu klawisza na klawiaturze. | tak | tak |
naciśnięcie klawisza | onkeypress | Pożary po naciśnięciu klawisza, gdy naciśnięty jest klawisz na klawiaturze. | tak | tak | |
uruchamianie | onkeyup | Pożary po zwolnieniu klawisza na klawiaturze | tak | tak | |
Ramka HTML /obiekt | Załaduj | onload | Uruchamiany, gdy agent użytkownika kończy ładowanie całej zawartości dokumentu, w tym okna, ramek, obiektów i obrazów
W przypadku elementów uruchamia się, gdy element docelowy i cała jego zawartość zostaną załadowane |
Nie | Nie |
rozładować | onunload | Pożary, gdy klient użytkownika usunie całą zawartość z okna lub ramki
W przypadku elementów uruchamia się, gdy element docelowy lub jakakolwiek jego zawartość zostanie usunięta |
Nie | Nie | |
anulować | onaborta | Pożary, gdy ładowanie obiektu/obrazu zostało zatrzymane przed całkowitym załadowaniem | tak | Nie | |
błąd | onerror | Pożary, gdy nie można poprawnie załadować obiektu/obrazu/ramki | tak | Nie | |
Zmień rozmiar | onresize | Pożary, gdy rozmiar widoku dokumentu jest zmieniany | tak | Nie | |
zwój | onscroll | Uruchamia się, gdy przewijany jest widok elementu lub dokumentu | Nie, z wyjątkiem tego, że zdarzenie przewijania w dokumencie musi pojawiać się w oknie | Nie | |
Formularz HTML | Wybierz | onselect | Uruchamiany, gdy użytkownik zaznaczy tekst w polu tekstowym , w tym input i textarea | tak | Nie |
reszta | onchange | Uruchamiany, gdy kontrolka traci fokus wprowadzania, a jej wartość została zmodyfikowana od momentu uzyskania fokusu | tak | Nie | |
Zatwierdź | przy zgłoszeniu | Pożary po przesłaniu formularza | tak | tak | |
Resetowanie | onreset | Pożary, gdy formularz jest resetowany | tak | Nie | |
Centrum | skoncentrowany | Pożary, gdy element otrzymuje fokus za pomocą urządzenia wskazującego lub nawigacji po kartach | Nie | Nie | |
plama | onblur | Pożary, gdy element traci ostrość za pomocą urządzenia wskazującego lub nawigowania za pomocą kart | Nie | Nie | |
Interfejs użytkownika | skupić się na | (Żaden) | Podobne do zdarzenia ogniskowania HTML, ale można je zastosować do dowolnego elementu, na który można się skupić | tak | Nie |
skupienie | (Żaden) | Podobny do zdarzenia rozmycia HTML, ale można go zastosować do dowolnego elementu, na który można ustawić ostrość | tak | Nie | |
DOMAktywuj | (Żaden) | Podobne do zdarzenia polecenia XUL. Pożary, gdy element jest aktywowany, na przykład poprzez kliknięcie myszą lub naciśnięcie klawisza. | tak | tak | |
Mutacja | DOMSubtreeModified | (Żaden) | Pożary, gdy poddrzewo jest modyfikowane | tak | Nie |
Wstawiono węzeł DOM | (Żaden) | Pożary, gdy węzeł został dodany jako dziecko innego węzła | tak | Nie | |
Węzeł DOMUsunięto | (Żaden) | Pożary, gdy węzeł został usunięty z drzewa DOM | tak | Nie | |
DOMNodeUsunięto z dokumentu | (Żaden) | Pożary, gdy węzeł jest usuwany z dokumentu | Nie | Nie | |
Węzeł DOM wstawiony do dokumentu | (Żaden) | Pożary, gdy węzeł jest wstawiany do dokumentu | Nie | Nie | |
DOMAttrZmodyfikowany | (Żaden) | Pożary, gdy atrybut został zmodyfikowany | tak | Nie | |
Zmodyfikowane dane DOMCharacter | (Żaden) | Pożary, gdy dane postaci zostały zmodyfikowane | tak | Nie | |
Postęp | Rozpoczęcie ładowania | (Żaden) | Postęp się rozpoczął. | Nie | Nie |
postęp | (Żaden) | W trakcie. Po wysłaniu loadstartu. | Nie | Nie | |
błąd | (Żaden) | Progresja nie powiodła się. Po wysłaniu ostatniego postępu lub po wysłaniu loadstart, jeśli postęp nie został wysłany. | Nie | Nie | |
anulować | (Żaden) | Progresja zostaje zakończona. Po wysłaniu ostatniego postępu lub po wysłaniu loadstart, jeśli postęp nie został wysłany. | Nie | Nie | |
Załaduj | (Żaden) | Progresja się powiodła. Po wysłaniu ostatniego postępu lub po wysłaniu loadstart, jeśli postęp nie został wysłany. | Nie | Nie | |
załadować | (Żaden) | Postęp się zatrzymał. Po wysłaniu jednego z błędów, przerwania lub załadowania. | Nie | Nie |
Zwróć uwagę, że zdarzenia, których nazwy zaczynają się od „DOM”, nie są obecnie dobrze obsługiwane, a z tego i innych powodów wydajnościowych są przestarzałe przez W3C w DOM Level 3. Mozilla i Opera obsługują DOMAttrModified , DOMNodeInserted , DOMNodeRemoved i DOMCharacterDataModified . Chrome i Safari obsługują te zdarzenia, z wyjątkiem DOMAttrModified .
Dotykowe wydarzenia
Przeglądarki internetowe działające na urządzeniach dotykowych , takich jak iOS firmy Apple i Android firmy Google , generują dodatkowe zdarzenia.
Kategoria | Rodzaj | Atrybut | Opis | Bąbelki | Możliwość anulowania |
---|---|---|---|---|---|
Dotykać | dotknij start | Pożary po przyłożeniu palca do powierzchni dotykowej/ekranu. | tak | tak | |
dotyk | Pożary, gdy palec zostanie usunięty z powierzchni dotykowej/ekranu. | tak | tak | ||
dotknijprzesuń | Pożary, gdy palec już umieszczony na ekranie zostanie przesunięty po ekranie. | tak | tak | ||
dotykwchodzić | Uruchamiany, gdy punkt dotykowy przesuwa się na obszar interaktywny zdefiniowany przez element DOM. | tak | tak | ||
dotykaćopuścić | Uruchamiany, gdy punkt kontaktu przesuwa się poza obszar interaktywny zdefiniowany przez element DOM. | tak | tak | ||
anuluj dotyk | Kliencka musi wysyłką tego typu zdarzeń, aby wskazać, kiedy TouchPoint został rozbity w implementacji specyficzny sposób, na przykład przez przeniesienie poza granice okna UA. Agent użytkownika może również wywołać ten typ zdarzenia, gdy użytkownik umieści więcej punktów dotykowych (punkt współrzędnych, w którym wskaźnik (np. palec lub rysik) przecina docelową powierzchnię interfejsu) na powierzchni dotykowej niż urządzenie lub implementacja jest skonfigurowana do store, w takim przypadku należy usunąć najwcześniejszy obiekt TouchPoint z TouchList. | tak | Nie |
W W3C projektu zalecenia, TouchEvent
dostarcza TouchList
z Touch
miejsc, gdy Klawisze modyfikujące , które były aktywny, TouchList
z Touch
miejsc w obrębie docelowego elementu DOM, oraz TouchList
od Touch
miejsc, które zmieniły się od poprzedniego TouchEvent
.
Apple nie dołączył do tej grupy roboczej i opóźnił zalecenie W3C swojej specyfikacji Touch Events, ujawniając patenty na późnym etapie procesu rekomendacji.
Wydarzenia wskaźnikowe
Przeglądarki internetowe na urządzeniach z różnymi typami urządzeń wejściowych, w tym myszą, panelem dotykowym i piórem, mogą generować zintegrowane zdarzenia wejściowe. Użytkownicy mogą zobaczyć, jaki typ urządzenia wejściowego jest wciśnięty, jaki przycisk jest wciśnięty na tym urządzeniu i jak mocno przycisk jest wciskany w przypadku rysika. Od października 2013 to wydarzenie jest obsługiwane tylko przez Internet Explorer 10 i 11.
Kategoria | Rodzaj | Atrybut | Opis | Bąbelki | Możliwość anulowania |
---|---|---|---|---|---|
Wskaźnik | wskaźnik w dół | na wskaźniku w dół | Pożary, gdy przycisk urządzenia wskazującego jest aktywowany lub naciśnięty nad elementem. | tak | tak |
wskaźnik | onpointerup | Pożary, gdy przycisk urządzenia wskazującego zostanie zwolniony nad elementem | tak | tak | |
wskaźnikanuluj | na wskaźniku anuluj | Uruchamiany, gdy urządzenie wskazujące prawdopodobnie nie będzie kontynuować generowania zdarzenia, ponieważ na przykład urządzenie jest używane do panoramowania/powiększania po zdarzeniu wskazującym. | tak | tak | |
ruch wskaźnika | onpointermove | Pożary, gdy urządzenie wskazujące jest przesuwane, gdy znajduje się nad elementem | tak | tak | |
wskaźnik | na wskaźniku | Pożary, gdy urządzenie wskazujące zostanie przesunięte na element | tak | tak | |
wskaźnik | onpointerout | Pożary, gdy urządzenie wskazujące jest odsunięte od elementu. Odpala również po wskazaniu przez urządzenie wskazujące bez najeżdżania lub po | tak | tak | |
wskaźnik | onpointerenter | Pożary, gdy urządzenie wskazujące zostanie przesunięte na element lub gdy przycisk urządzenia wskazującego, który nie obsługuje unoszenia, zostanie naciśnięty na jednym z jego elementów podrzędnych. | Nie | tak | |
wskaźnikopuść | na pointerleave | Pożary, gdy urządzenie wskazujące zostanie odsunięte od elementu lub gdy przycisk urządzenia wskazującego, który nie obsługuje unoszenia, zostanie zwolniony nad elementami podrzędnymi. | Nie | tak | |
Gotpointercapture | ongotpointercapture | Pożary, gdy wskaźnik zostanie przechwycony przez metodę setPointerCapture. | tak | Nie | |
przechwycenie zagubionego wskaźnika | Przechwytywanie utraconego wskaźnika | Uruchamiany, gdy wskaźnik zostanie zwolniony przez metodę releasePointerCapture. | tak | Nie |
Wydarzenia związane z niezależnym interfejsem użytkownika
Grupy robocze Indie UI, które jeszcze nie zostały zaimplementowane, chcą pomóc twórcom aplikacji internetowych w obsłudze standardowych zdarzeń interakcji użytkownika bez konieczności obsługi zdarzeń technicznych związanych z różnymi platformami, które mogłyby się z nimi równać.
Skryptowanie użytecznych interfejsów może być trudne, zwłaszcza jeśli weźmie się pod uwagę, że wzorce projektowe interfejsów użytkownika różnią się w zależności od platformy oprogramowania, sprzętu i ustawień regionalnych, oraz że te interakcje można dalej dostosowywać w oparciu o osobiste preferencje. Osoby są przyzwyczajone do sposobu, w jaki interfejs działa w ich własnym systemie, a preferowany przez nich interfejs często różni się od interfejsu preferowanego przez autora aplikacji internetowej.
Na przykład autorzy aplikacji internetowych, którzy chcą przechwycić zamiar użytkownika, aby cofnąć ostatnią akcję, muszą „nasłuchiwać” wszystkich następujących zdarzeń:
- Control+Z w systemach Windows i Linux.
- Command+Z w systemie Mac OS X.
- Potrząśnij wydarzeniami na niektórych urządzeniach mobilnych.
Prościej byłoby nasłuchiwać pojedynczego, znormalizowanego żądania „cofnięcia” poprzedniej akcji.
Kategoria | Rodzaj | Opis | Bąbelki | Możliwość anulowania |
---|---|---|---|---|
Wniosek | nieprosić | Wskazuje, że użytkownik chce „cofnąć” poprzednią akcję. (Może być zastąpiony przez interfejs UndoManager.) | tak | tak |
ponawianie prośby | Wskazuje, że użytkownik chce „ponownie” wykonać poprzednio „cofniętą” akcję. (Może być zastąpiony przez interfejs UndoManager.) | tak | nie | |
rozwińzapytanie | Wskazuje, że użytkownik chce ujawnić informacje w zwiniętej sekcji (np. widżet ujawniania) lub węźle gałęzi w hierarchii (np. widok drzewa ). | tak | tak | |
prośba o zwinięcie | Wskazuje, że użytkownik chce ukryć lub zwinąć informacje w rozwiniętej sekcji (np. widżecie ujawniania) lub węźle gałęzi w hierarchii (np. widok drzewa). | tak | tak | |
prośba o odrzucenie | Wskazuje, że użytkownik chce „odrzucić” bieżący widok (np. anulowanie okna dialogowego lub zamknięcie wyskakującego menu). | tak | tak | |
usuńżądanie | Wskazuje, że użytkownik chce zainicjować akcję „usuń” na zaznaczonym elemencie lub bieżącym widoku. | tak | tak | |
Prośba o skupienie | kierunkowe zapytanie | Inicjowane, gdy klient użytkownika wysyła żądanie „kierunku fokusu” do aplikacji internetowej. Autorzy stron internetowych nie powinni używać ani rejestrować się w zdarzeniach directionalfocusrequest, gdy standardowe zdarzenia fokusu i rozmycia przeglądarki są wystarczające. Niepotrzebne korzystanie z tych zdarzeń może spowodować zmniejszenie wydajności lub negatywne wrażenia użytkownika. | tak | tak |
zapytanie liniowe | Inicjowane, gdy klient użytkownika wysyła żądanie „liniowego fokusu” do aplikacji internetowej. Autorzy stron internetowych nie powinni używać ani rejestrować się w zdarzeniach linearfocusrequest, gdy standardowe zdarzenia fokusu i rozmycia przeglądarki są wystarczające. Ten typ zdarzenia jest konieczny tylko w wyspecjalizowanych typach kontroli, takich jak siatki danych, w których kolejny logiczny element może nie być skoncentrowany, a nawet w DOM, dopóki nie zostanie zażądany. Niepotrzebne korzystanie z tych zdarzeń może spowodować zmniejszenie wydajności lub negatywne wrażenia użytkownika. | tak | tak | |
paletafocusżądanie | Inicjowane, gdy klient użytkownika wysyła żądanie „palety fokusu” do aplikacji internetowej. Autorzy aplikacji internetowych otrzymujący to zdarzenie powinni przenieść fokus na pierwszą paletę w aplikacji internetowej lub przełączać fokus między wszystkimi dostępnymi paletami. Uwaga: palety są czasami nazywane niemodalnymi oknami dialogowymi lub oknami inspektorów. | tak | tak | |
pasek narzędzi focus request | Inicjowane, gdy klient użytkownika wysyła żądanie „aktywności paska narzędzi” do aplikacji internetowej. Autorzy aplikacji sieci Web otrzymujący to zdarzenie powinni przenieść fokus na główny pasek narzędzi w aplikacji sieci Web lub przełączać fokus między wszystkimi dostępnymi paskami narzędzi. | tak | tak | |
Prośba o manipulację | prośba o przeniesienie | Inicjowane, gdy klient użytkownika wysyła żądanie przeniesienia do aplikacji internetowej z towarzyszącymi wartościami delta x/y. Jest to używane na przykład podczas przenoszenia obiektu do nowej lokalizacji na kanwie układu. | tak | tak |
panrequest | Inicjowane, gdy klient użytkownika wysyła żądanie panoramowania do aplikacji internetowej z towarzyszącymi wartościami delta x/y. Jest to używane na przykład podczas zmiany punktu środkowego podczas panoramowania mapy lub innej niestandardowej przeglądarki obrazów. | tak | tak | |
żądanie rotacji | Inicjowane, gdy klient użytkownika wysyła żądanie rotacji do aplikacji internetowej z towarzyszącymi wartościami pochodzenia x/y i wartością rotacji w stopniach. | tak | tak | |
zoomżądanie | Inicjowane, gdy klient użytkownika wysyła żądanie powiększenia do aplikacji internetowej z towarzyszącymi wartościami początku x/y i współczynnikiem skali powiększenia. | tak | tak | |
Przewiń prośbę | przewijanie prośby | Inicjowane, gdy agent użytkownika wysyła żądanie przewijania do aplikacji sieci Web z towarzyszącymi wartościami delta x/y lub jedną z innych zdefiniowanych wartości scrollType. Autorzy powinni używać tego zdarzenia i uiaction tylko z niestandardowymi widokami przewijania. | tak | tak |
Żądanie zmiany wartości | prośba o zmianę wartości | Inicjowane, gdy klient użytkownika wysyła żądanie zmiany wartości do aplikacji internetowej. Używany w niestandardowych kontrolkach zakresu, takich jak suwaki, karuzele itp. | tak | tak |
Wydarzenia związane z Internet Explorerem
Oprócz wspólnych (W3C) zdarzeń, Internet Explorer dodaje dwa główne typy zdarzeń . Niektóre ze zdarzeń zostały zaimplementowane jako de facto standardy przez inne przeglądarki.
- Wydarzenia w schowku .
- Zdarzenia wiązania danych.
Kategoria | Rodzaj | Atrybut | Opis | Bąbelki | Możliwość anulowania |
---|---|---|---|---|---|
Schowek | skaleczenie | nacięcie | Pożary po wycięciu zaznaczenia do schowka. | tak | tak |
Kopiuj | oncopy | Pożary po skopiowaniu zaznaczenia do schowka. | tak | tak | |
pasta | onwklej | Pożary po wklejeniu zaznaczenia ze schowka. | tak | tak | |
przed cięciem | przed wycięciem | Pożary przed wycięciem zaznaczenia do schowka. | tak | tak | |
przed kopiowaniem | przed kopiowaniem | Uruchamiany przed skopiowaniem zaznaczenia do schowka. | tak | tak | |
przed wklejeniem | przed wklejeniem | Uruchamiany przed wklejeniem zaznaczenia ze schowka. | tak | tak | |
Wiązanie danych | po aktualizacji | po aktualizacji | Uruchamiany natychmiast po zaktualizowaniu obiektu powiązanego z danymi. | tak | Nie |
przed aktualizacją | przed aktualizacją | Pożary przed aktualizacją źródła danych. | tak | tak | |
zmiana komórki | podczas zmiany komórki | Pożary, gdy zmieniło się źródło danych. | tak | Nie | |
Dane dostępne | dostępne dane | Uruchamiany, gdy dostępne są nowe dane ze źródła danych. | tak | Nie | |
Zmieniono zbiór danych | ondatasetzmieniony | Uruchamiany, gdy zawartość w źródle danych uległa zmianie. | tak | Nie | |
kompletny zbiór danych | ondatasetkompletny | Pożary po zakończeniu przesyłania danych ze źródła danych. | tak | Nie | |
aktualizacja błędów | onerrorupdate | Pożary, jeśli wystąpi błąd podczas aktualizacji pola danych. | tak | Nie | |
wioślarz | onrowenter | Uruchamiany, gdy dostępny jest nowy wiersz danych ze źródła danych. | tak | Nie | |
rowexit | onrowexit | Uruchamiany, gdy wiersz danych ze źródła danych właśnie się zakończył. | Nie | tak | |
usuwanie wierszy | onrowsdelete | Pożary, gdy wiersz danych ze źródła danych zostanie usunięty. | tak | Nie | |
wstawiony | onrowwstawiony | Uruchamiany po wstawieniu wiersza danych ze źródła danych. | tak | Nie | |
Mysz | menu kontekstowe | w menu kontekstowym | Pożary, gdy wyświetlane jest menu kontekstowe. | tak | tak |
ciągnąć | ondrag | Pożary podczas przeciągania myszy (na poruszającym się elemencie). | tak | tak | |
dragstart | ondragstart | Pożary, gdy zaczyna się przeciąganie myszą (na poruszającym się elemencie). | tak | tak | |
dragenter | ondragenter | Pożary, gdy coś zostanie przeciągnięte na obszar (na docelowy element). | tak | tak | |
dragover | ondragover | Pożary, gdy przeciągnięcie jest przytrzymywane nad obszarem (na docelowym elemencie). | tak | tak | |
dragleave | ondragleave | Pożary, gdy coś zostanie wyciągnięte z obszaru (na docelowy element). | tak | tak | |
dragend | ondragend | Pożary, gdy kończy się przeciąganie myszą (na poruszającym się elemencie). | tak | tak | |
upuszczać | ondrop | Wystrzeliwany, gdy przycisk myszy zostanie zwolniony nad prawidłowym celem podczas przeciągania (na docelowym elemencie). | tak | tak | |
wybierz start | nawybierzstart | Pożary, gdy użytkownik zaczyna zaznaczać tekst. | tak | tak | |
Klawiatura | Wsparcie | na pomoc | Pożary, gdy użytkownik zainicjuje pomoc. | tak | tak |
Ramka/obiekt HTML | przed rozładowaniem | przed rozładowaniem | Pożary przed wyładowaniem dokumentu. | Nie | tak |
zatrzymać | na przystanku | Pożary, gdy użytkownik przestaje ładować obiekt. (w przeciwieństwie do przerwania, zdarzenie stop może być dołączone do dokumentu) | Nie | Nie | |
formularz HTML | przededycji focus | przededytować focus | Wystrzeliwuje, zanim element skupi się na edycji. | tak | tak |
Duży namiot | początek | na starcie | Uruchamiany, gdy markiza zaczyna nową pętlę. | Nie | Nie |
koniec | onfinish | Uruchamiany po zakończeniu tworzenia pętli markizy. | Nie | tak | |
podskakiwać | onbounce | Pożary, gdy przewijany namiot odbija się w przeciwnym kierunku. | Nie | tak | |
Różnorodny | przed drukiem | przed wydrukiem | Pożary przed wydrukowaniem dokumentu | Nie | Nie |
podruk | onafterprint | Uruchamiany natychmiast po wydrukowaniu dokumentu. | Nie | Nie | |
zmiana własności | zmiana nieruchomości | Pożary, gdy właściwość obiektu zostanie zmieniona. | Nie | Nie | |
wymiana filtra | onfilterchange | Uruchamiany, gdy filtr zmienia właściwości lub kończy przejście. | Nie | Nie | |
zmiana stanu gotowości | onreadystatechange | Uruchamiany, gdy zmienia się właściwość readyState elementu. | Nie | Nie | |
przegrać | przechwycenie w samotności | Uruchamiany, gdy wywoływana jest metoda releaseCapture. | Nie | Nie |
Zauważ, że Mozilla, Safari i Opera obsługują również zdarzenie readystatechange dla obiektu XMLHttpRequest . Mozilla obsługuje również zdarzenie beforeunload przy użyciu tradycyjnej metody rejestracji zdarzeń (DOM Level 0). Mozilla i Safari również obsługują menu kontekstowe, ale Internet Explorer dla Mac nie.
Zauważ, że Firefox 6 i nowsze wersje obsługują zdarzenia beforeprint i afterprint.
Wydarzenia XUL
Oprócz wspólnych (W3C) zdarzeń, Mozilla zdefiniowała zestaw zdarzeń, które działają tylko z elementami XUL .
Kategoria | Rodzaj | Atrybut | Opis | Bąbelki | Możliwość anulowania |
---|---|---|---|---|---|
Mysz | DOMMuseScroll | DOMMuseScroll | Uruchamia się, gdy porusza się kółkiem myszy, powodując przewijanie zawartości. | tak | tak |
przeciągnij | ondragdrop | Uruchamiany, gdy użytkownik zwolni przycisk myszy, aby upuścić przeciągany obiekt . | Nie | Nie | |
dragenter | ondragenter | Uruchamiany, gdy wskaźnik myszy po raz pierwszy przesuwa się nad elementem podczas przeciągania. Jest to podobne do zdarzenia najechania kursorem myszy, ale występuje podczas przeciągania. | Nie | Nie | |
dragexit | ondragexit | Pożary, gdy wskaźnik myszy odsunie się od elementu podczas przeciągania. Nazywa się go również po upuszczeniu na element. Jest to podobne do zdarzenia mouseout, ale występuje podczas przeciągania. | Nie | Nie | |
przeciąganie | ondraggest | Pożary, gdy użytkownik zaczyna przeciągać element, zwykle przez przytrzymanie przycisku myszy i poruszanie myszą. | Nie | Nie | |
dragover | ondragover | Powiązane ze zdarzeniem mousemove, to zdarzenie jest uruchamiane, gdy coś jest przeciągane nad elementem. | Nie | Nie | |
Wejście | Pole wyboruZmiana stanu | Uruchamiany, gdy pole wyboru jest zaznaczone lub odznaczone przez użytkownika lub skrypt. | Nie | Nie | |
Zmiana stanu radia | Uruchamiany po wybraniu przycisku radiowego przez użytkownika lub skrypt. | Nie | Nie | ||
blisko | onclose | Pożary, gdy zgłoszono żądanie zamknięcia okna. | Nie | tak | |
Komenda | na komendę | Podobne do zdarzenia W3C DOMActivate. Pożary, gdy element jest aktywowany, na przykład poprzez kliknięcie myszą lub naciśnięcie klawisza. | Nie | Nie | |
Wejście | na wejściu | Pożary, gdy użytkownik wprowadzi tekst w polu tekstowym. | tak | Nie | |
Interfejs użytkownika | DOMMenuItemActive | DOMMenuItemActive | Uruchamiany przy menu lub menuitem jest unosił się nad lub podświetlone. | tak | Nie |
DOMMenuItemNieaktywne | DOMMenuItemNieaktywne | Uruchamiany, gdy menu lub element menu nie jest już najeżdżany lub podświetlany. | tak | Nie | |
menu kontekstowe | w menu kontekstowym | Pożary, gdy użytkownik zażąda otwarcia menu kontekstowego elementu. Działanie, które należy wykonać, zależy od platformy, ale zazwyczaj będzie to kliknięcie prawym przyciskiem myszy. | Nie | tak | |
przelewowy | przepełnienie | Uruchamia pole lub inny element układu, gdy nie ma wystarczającej ilości miejsca, aby wyświetlić go w pełnym rozmiarze. | Nie | Nie | |
Zmieniono przepełnienie | onoverflowzmieniono | Pożary, gdy zmieni się stan przepełnienia. | Nie | Nie | |
niedomiar | na niedomiar | Uruchamia się do elementu, gdy jest wystarczająco dużo miejsca, aby wyświetlić go w pełnym rozmiarze. | Nie | Nie | |
wyskakujący | napopupied | Uruchamia wyskakujące okienko po ukryciu. | Nie | Nie | |
wypychanie | onpopuphiking | Uruchamia wyskakujące okienko, gdy ma zostać ukryte. | Nie | Nie | |
wyskakujące okienko | na wyskakującym okienku | Uruchamia wyskakujące okienko tuż przed jego otwarciem. | Nie | tak | |
wyskakujące okienko | na wyskakującym okienku | Uruchamia wyskakujące okienko po jego otwarciu, podobnie jak zdarzenie onload jest wysyłane do okna po jego otwarciu. | Nie | Nie | |
Komenda | audycja | nadawane | Umieszczony na obserwatorze. Zdarzenie rozgłaszania jest wysyłane, gdy zmienią się atrybuty nasłuchiwanego rozgłaszacza. | Nie | Nie |
aktualizacja poleceń | Aktualizacja napolecenie | Pożary, gdy nastąpi aktualizacja polecenia. | Nie | Nie |
Inne wydarzenia
W przypadku Mozilli i Opery 9 istnieją również nieudokumentowane zdarzenia znane jako DOMContentLoaded i DOMFrameContentLoaded, które są uruchamiane po załadowaniu zawartości DOM. Różnią się one od „load”, ponieważ uruchamiają się przed załadowaniem powiązanych plików (np. obrazów). Jednak DOMContentLoaded został dodany do specyfikacji HTML 5 . Zdarzenie DOMContentLoaded zostało również zaimplementowane w silniku renderującym Webkit build 500+. Odnosi się to do wszystkich wersji Google Chrome i Safari 3.1+. DOMContentLoaded jest również zaimplementowany w przeglądarce Internet Explorer 9 .
Opera 9 obsługuje również zdarzenia Web Forms 2.0 DOMControlValueChanged , invalid , forminput i formchange .
Przebieg wydarzenia
Rozważ sytuację, w której dwa cele zdarzeń uczestniczą w drzewie . Oba mają detektory zdarzeń zarejestrowane dla tego samego typu zdarzenia, powiedz „kliknij”. Gdy użytkownik kliknie na element wewnętrzny, istnieją dwa sposoby na jego obsługę:
- Wyzwalaj elementy od zewnętrznych do wewnętrznych (przechwytywanie zdarzeń). Ten model jest zaimplementowany w Netscape Navigator .
- Wyzwalaj elementy od wewnętrznego do zewnętrznego ( bąbelkowanie zdarzeń ). Ten model jest zaimplementowany w Internet Explorerze i innych przeglądarkach.
W3C zajmuje środkową pozycję w tej walce.
Według W3C zdarzenia przechodzą przez trzy fazy, gdy cel zdarzenia uczestniczy w drzewie:
- Faza przechwytywania: zdarzenie przemieszcza się w dół od głównego celu zdarzenia do celu zdarzenia
- Faza docelowa: zdarzenie przechodzi przez cel zdarzenia
- Faza bąbelkowa ( opcjonalnie ): zdarzenie powraca z miejsca docelowego zdarzenia do głównego celu zdarzenia. Faza bąbelków będzie miała miejsce tylko w przypadku wydarzeń, w których bąbelki (gdzie
event.bubbles == true
)
Wizualizację tego przepływu zdarzeń można znaleźć na https://domevents.dev
Zatrzymywanie wydarzeń
Gdy wydarzenie przechodzi przez detektory zdarzeń, wydarzenie można zatrzymać za pomocą event.stopPropagation()
lubevent.stopImmediatePropagation()
-
event.stopPropagation()
: zdarzenie jest zatrzymywane po zakończeniu wszystkich detektorów zdarzeń dołączonych do bieżącego celu zdarzenia w bieżącej fazie zdarzenia -
event.stopImmediatePropagation()
: zdarzenie jest natychmiast zatrzymywane i nie są wykonywane żadne dalsze detektory zdarzeń
Kiedy wydarzenie zostanie zatrzymane, nie będzie już podróżować po ścieżce wydarzenia. Zatrzymanie wydarzenia nie anuluje wydarzenia.
Starsze mechanizmy zatrzymujące wydarzenie
- Ustawić
event.cancelBubble
natrue
(Internet Explorer) - Ustaw
event.returnValue
właściwość nafalse
Anulowanie wydarzeń
cancelable
Zdarzenie może zostać anulowane przez wywołanie event.preventDefault()
. Anulowanie wydarzenia spowoduje rezygnację z domyślnego zachowania przeglądarki dla tego wydarzenia. Gdy wydarzenie zostanie anulowane, event.defaultPrevented
właściwość zostanie ustawiona na true
. Anulowanie wydarzenia nie powstrzyma wydarzenia przed podróżowaniem po ścieżce wydarzenia.
Obiekt zdarzenia
Obiekt Event dostarcza wiele informacji o konkretnym zdarzeniu, w tym informacje o elemencie docelowym, wciśniętym klawiszu, wciśniętym przycisku myszy, pozycji myszy itp. Niestety w tym obszarze występują bardzo poważne niezgodności przeglądarek. Dlatego w tym artykule omówiono tylko obiekt zdarzenia W3C.
Nazwa | Rodzaj | Opis |
---|---|---|
rodzaj | DOMString | Nazwa zdarzenia (wielkość liter nie jest rozróżniana na poziomie DOM 2, ale rozróżniana jest wielkość liter na poziomie DOM 3 ). |
cel | EventCel | Służy do wskazania EventTarget, do którego zdarzenie zostało pierwotnie wysłane. |
obecny cel | EventCel | Służy do wskazania EventTarget, którego EventListeners są obecnie przetwarzane. |
faza wydarzenia | krótki bez znaku | Służy do wskazania, która faza przepływu zdarzeń jest aktualnie oceniana. |
bąbelki | logiczne | Służy do wskazania, czy zdarzenie jest zdarzeniem bulgotania. |
możliwość anulowania | logiczne | Służy do wskazywania, czy zdarzeniu można zapobiec jego domyślnej akcji. |
znak czasu | DOMznacznik czasu | Służy do określania czasu (w milisekundach w stosunku do epoki), w którym zdarzenie zostało utworzone. |
Nazwa | Typ argumentu | Nazwa argumentu | Opis |
---|---|---|---|
zatrzymaćPropagację | Aby zapobiec dalszemu rozprzestrzenianiu się zdarzenia podczas przepływu zdarzenia. | ||
zapobiecDefault | Anulować zdarzenie, jeśli jest możliwe do anulowania, co oznacza, że żadne domyślne działanie normalnie podejmowane przez implementację w wyniku zdarzenia nie nastąpi. | ||
initEvent | DOMString | eventTypeArg | Określa typ zdarzenia. |
logiczne | canBubbleArg | Określa, czy zdarzenie może bąbelkować. | |
logiczne | CancelableArg | Określa, czy można zapobiec domyślnej akcji zdarzenia. |
Modele obsługi imprez
DOM Poziom 0
Ten model obsługi zdarzeń został wprowadzony przez Netscape Navigator i od 2005 r. pozostaje najczęściej używanym modelem w różnych przeglądarkach. Istnieją dwa typy modeli: model wbudowany i model tradycyjny.
Model wbudowany
W modelu wbudowanym procedury obsługi zdarzeń są dodawane jako atrybuty elementów. W poniższym przykładzie po kliknięciu hiperłącza pojawia się okno dialogowe alertu z komunikatem „Hej Joe” . Domyślna akcja kliknięcia jest anulowana przez zwrócenie wartości false w obsłudze zdarzeń.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Inline Event Handling</title>
</head>
<body>
<h1>Inline Event Handling</h1>
<p>Hey <a href="http://www.example.com" onclick="triggerAlert('Joe'); return false;">Joe</a>!</p>
<script>
function triggerAlert(name) {
window.alert("Hey " + name);
}
</script>
</body>
</html>
Jednym z powszechnych nieporozumień dotyczących modelu inline jest przekonanie, że umożliwia on rejestrację obsługi zdarzeń z niestandardowymi argumentami, np. name
w triggerAlert
funkcji. Choć może się wydawać, że tak jest w powyższym przykładzie, tak naprawdę dzieje się tak, że silnik JavaScript przeglądarki tworzy anonimową funkcję zawierającą oświadczenia w onclick
atrybucie. Program onclick
obsługi elementu byłby powiązany z następującą anonimową funkcją:
function () {
triggerAlert('Joe');
return false;
}
To ograniczenie modelu zdarzeń JavaScript jest zwykle przezwyciężane przez przypisanie atrybutów do obiektu funkcji procedury obsługi zdarzeń lub przez użycie closures .
Model tradycyjny
W tradycyjnym modelu programy obsługi zdarzeń mogą być dodawane lub usuwane przez skrypty. Podobnie jak w przypadku modelu wbudowanego, każde zdarzenie może mieć zarejestrowany tylko jeden program obsługi zdarzeń. Zdarzenie jest dodawane przez przypisanie nazwy procedury obsługi do właściwości zdarzenia obiektu elementu. Aby usunąć procedurę obsługi zdarzeń, po prostu ustaw właściwość na null:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Traditional Event Handling</title>
</head>
<body>
<h1>Traditional Event Handling</h1>
<p>Hey Joe!</p>
<script>
var triggerAlert = function () {
window.alert("Hey Joe");
};
// Assign an event handler
document.onclick = triggerAlert;
// Assign another event handler
window.onload = triggerAlert;
// Remove the event handler that was just assigned
window.onload = null;
</script>
</body>
</html>
Aby dodać parametry:
var name = 'Joe';
document.onclick = (function (name) {
return function () {
alert('Hey ' + name + '!');
};
}(name));
Funkcje wewnętrzne zachowują swój zakres .
DOM Poziom 2
W3C zaprojektowało bardziej elastyczny model obsługi zdarzeń w DOM Level 2.
Nazwa | Opis | Typ argumentu | Nazwa argumentu |
---|---|---|---|
addEventListener | Umożliwia rejestrację detektorów zdarzeń w miejscu docelowym zdarzenia. | DOMString | rodzaj |
EventListener | słuchacz | ||
logiczne | użyjCapture | ||
usuńEventListener | Umożliwia usunięcie detektorów zdarzeń z celu zdarzenia. | DOMString | rodzaj |
EventListener | słuchacz | ||
logiczne | użyjCapture | ||
wysyłkaZdarzenie | Umożliwia wysyłanie zdarzenia do subskrybowanych detektorów zdarzeń. | Wydarzenie | evt |
Kilka przydatnych rzeczy, które warto wiedzieć:
- Aby zapobiec propagacji zdarzenia, programiści muszą wywołać
stopPropagation()
metodę obiektu zdarzenia. - Aby zapobiec wywołaniu domyślnej akcji zdarzenia, programiści muszą wywołać
preventDefault()
metodę obiektu zdarzenia.
Główną różnicą w stosunku do modelu tradycyjnego jest to, że dla tego samego zdarzenia można zarejestrować wiele programów obsługi zdarzeń. useCapture
Opcja może być również używany do określenia, że procedura obsługi powinny być nazywane w fazie przechwytywania zamiast fazie propagacji. Model ten jest obsługiwany przez Mozillę , Operę , Safari , Chrome i Konquerora .
Przepisanie przykładu używanego w tradycyjnym modelu
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>DOM Level 2</title>
</head>
<body>
<h1>DOM Level 2</h1>
<p>Hey Joe!</p>
<script>
var heyJoe = function () {
window.alert("Hey Joe!");
}
// Add an event handler
document.addEventListener( "click", heyJoe, true ); // capture phase
// Add another event handler
window.addEventListener( "load", heyJoe, false ); // bubbling phase
// Remove the event handler just added
window.removeEventListener( "load", heyJoe, false );
</script>
</body>
</html>
Model specyficzny dla przeglądarki Internet Explorer
Microsoft Internet Explorer przed wersją 8 nie jest zgodny z modelem W3C, ponieważ jego własny model został stworzony przed ratyfikacją standardu W3C. Internet Explorer 9 podąża za zdarzeniami DOM poziomu 3, a Internet Explorer 11 usuwa obsługę modelu specyficznego dla firmy Microsoft.
Nazwa | Opis | Typ argumentu | Nazwa argumentu |
---|---|---|---|
attachEvent | Podobny do metody addEventListener W3C. | Strunowy | sZdarzenie |
Wskaźnik | fpPowiadom | ||
OdłączZdarzenie | Podobny do metody removeEventListener W3C. | Strunowy | sZdarzenie |
Wskaźnik | fpPowiadom | ||
fireEvent | Podobny do metody dispatchEvent W3C. | Strunowy | sZdarzenie |
Wydarzenie | oEventObject |
Kilka przydatnych rzeczy, które warto wiedzieć:
- Aby zapobiec propagacji zdarzenia, programiści muszą ustawić właściwość zdarzenia
cancelBubble
. - Aby zapobiec wywoływaniu domyślnej akcji zdarzenia, programiści muszą ustawić właściwość zdarzenia
returnValue
. - Słowo
this
kluczowe odnosi się dowindow
obiektu globalnego .
Ponownie ten model różni się od modelu tradycyjnego tym, że dla tego samego zdarzenia można zarejestrować wiele programów obsługi zdarzeń. Jednak useCapture
opcja nie może być użyta do określenia, że handler powinien być wywoływany w fazie przechwytywania. Model ten jest obsługiwany przez przeglądarki oparte na Microsoft Internet Explorer i Trident (np. Maxthon , Avant Browser ).
Przepisanie przykładu używanego w starym modelu specyficznym dla Internet Explorera
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Internet Explorer-specific model</title>
</head>
<body>
<h1>Internet Explorer-specific model</h1>
<p>Hey Joe!</p>
<script>
var heyJoe = function () {
window.alert("Hey Joe!");
}
// Add an event handler
document.attachEvent("onclick", heyJoe);
// Add another event handler
window.attachEvent("onload", heyJoe);
// Remove the event handler just added
window.detachEvent("onload", heyJoe);
</script>
</body>
</html>
Bibliografia
- Deitela, Harveya. (2002). Internet i World Wide Web: jak programować (wydanie drugie). ISBN 0-13-030897-8
- Organizacja Mozilli. (2009). Dokumentacja zdarzeń DOM . Źródło 25 sierpnia 2009.
- Dziwaczny tryb (2008). Tabele zgodności zdarzeń . Źródło 27 listopada 2008.
- http://www.sitepen.com/blog/2008/07/10/touching-and-gesturing-on-the-iphone/
Zewnętrzne linki
- Specyfikacja Zdarzeń Poziomu 2 Document Object Model (DOM)
- Document Object Model (DOM) Poziom 3 Zdarzenia Wersja robocza
- DOM4: Wydarzenia (wersja robocza redaktora)
- Wersja robocza zdarzeń interfejsu użytkownika
- Pointer Events Rekomendacja kandydata W3C
- Zdarzenie wskaźnika MSDN
- domevents.dev - wizualizator do poznawania zdarzeń DOM poprzez eksplorację
- JS skrzypce do tworzenia pęcherzyków i przechwytywania zdarzeń