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:
  • w dół myszy
  • w górę myszy
  • Kliknij
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, TouchEventdostarcza TouchListz Touchmiejsc, gdy Klawisze modyfikujące , które były aktywny, TouchListz Touchmiejsc w obrębie docelowego elementu DOM, oraz TouchListod Touchmiejsc, 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:

  1. Faza przechwytywania: zdarzenie przemieszcza się w dół od głównego celu zdarzenia do celu zdarzenia
  2. Faza docelowa: zdarzenie przechodzi przez cel zdarzenia
  3. 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.cancelBubblena true(Internet Explorer)
  • Ustaw event.returnValuewłaściwość nafalse

Anulowanie wydarzeń

cancelableZdarzenie 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.defaultPreventedwł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.

Właściwości wydarzenia
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.
Metody eventowe
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. namew triggerAlertfunkcji. 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 onclickatrybucie. Program onclickobsł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ń. useCaptureOpcja 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 thiskluczowe odnosi się do windowobiektu 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 useCaptureopcja 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

Bibliografia