DOM-Ereignis Vorrang
-
08-07-2019 - |
Frage
Welche Rangordnung werden die Ereignisse in JavaScript behandelt?
Hier sind die Ereignisse in alphabetischer Reihenfolge ...
- onabort - Laden eines Bildes unterbrochen
- onblur - Ein Element den Fokus verliert
- Onchange - Der Benutzer ändert die Inhalt eines Feldes
- Onclick - Mausklicks ein Objekt
- ondblclick - Maus doppelklickt ein Objekt
- onerror - Ein Fehler tritt auf, wenn ein Dokument oder ein Bild geladen
- onfocus - Ein Element den Fokus erhält
- onkeydown - eine Taste der Tastatur ist gedrückt
- onkeypress - eine Taste der Tastatur ist gepresst oder gedrückt
- onkeyup - eine Taste der Tastatur ist freigegeben
- onload - Eine Seite oder ein Bild fertig geladen
- onmousedown - eine Maustaste gedrückt
- onmousemove - Die Maus bewegt wird,
- onmouseout - Die Maus bewegt wird ausgeschaltet ein Element
- Onmouseover - Die Maus bewegt wird, über ein Element
- onmouseup - eine Maustaste freigegeben
- onreset - Die Reset-Taste ist geklickt
- onresize - Ein Fenster oder Frame Größe verändert
- onselect - Text ausgewählt
- onsubmit - Der Submit-Button ist geklickt
- onunload - Der Benutzer verlässt die Seite
Was sind, um sie aus der Ereigniswarteschlange behandelt?
Die Priorität ist nicht first-in-first-out (FIFO) oder so glaube ich.
Lösung
Das war nicht, so weit ich weiß, explizit in der Vergangenheit definiert. Verschiedene Browser sind kostenlose Veranstaltung Bestellung implementieren aber sie für richtig halten. Während die meisten nahe genug für alle praktischen Zwecke sind dort gewesen und weiterhin einige ungerade Rand Fällen, wo Browser etwas unterscheiden (und, natürlich, nicht die vielen anderen Fällen, in denen bestimmte Browser überhaupt bestimmte Ereignisse senden ).
Das heißt, die HTML 5 Entwurf einer Empfehlung macht einen Versuch machen, zu spezifizieren, wie die Ereignisse der Warteschlange werden und versandt - die Ereignisschleife :
Ereignisse zu koordinieren, Benutzer Interaktion, Skripte, Rendering, Vernetzung, und so weiter, Benutzeragenten verwenden Ereignisschleifen müssen, wie in In diesem Abschnitt wird.
Es muss mindestens eine Ereignisschleife sein pro User-Agent, und höchstens ein Ereignis Schleife pro Einheit von verwandten ähnlich Ursprungs-Browsing Kontexten.
Eine Ereignisschleife hat eine oder mehr Aufgaben Warteschlangen. Eine Task-Warteschlange ist eine geordnete Liste der Aufgaben [...] Wenn ein Benutzeragent ist eine Aufgabe in der Warteschlange, es muss die gegebene Aufgabe zu einem der hinzufügen die Aufgabenwarteschlangen der jeweiligen Veranstaltung Schleife. Alle Aufgaben von einem besondere Aufgabe Quelle muss immer auf die gleiche Aufgabenwarteschlange hinzugefügt, aber Aufgaben aus verschiedenen Aufgabenquellen werden in verschiedenen Aufgabenwarteschlangen platziert. [...]
[...] ein User-Agent eine Task-Warteschlange haben könnte für Maus- und Tastaturereignisse (der Benutzer Interaktion Aufgabe Quelle), und ein anderer für alles andere. Der User-Agent geben könnte dann Tastatur und Maus Veranstaltungen Vorrang vor anderen Aufgaben drei Viertel der Zeit, zu halten die Schnittstelle reagiert, aber nicht hungern andere Aufgabe Warteschlangen und nie Prozessierungsereignisse aus einer und derselben Aufgabe aus der Ordnung Quelle. [...]
Beachten Sie, dass letzte Bit: es liegt an den Browser Implementierung zu bestimmen, welche Ereignisse zusammen gruppiert, um werden und verarbeitet werden, sowie die Priorität auf eine bestimmte Art von Veranstaltung gegeben. Daher gibt es wenig Grund, alle Browser zu erwarten versenden alle Ereignisse in einer festen Reihenfolge, jetzt oder in der Zukunft.
Andere Tipps
Für alle, die Sequenz relativ Ereignisse kennen aufgerufen, siehe unten. Bisher habe ich nur in Chrome getestet.
- Mouseover
- mousemove-
- mouseout
- mousedown-
- Wechsel (fokussierte Eingang)
- blur (auf fokussierte Element)
- Fokus
- mouseup
- Klicken Sie auf
- dblclick
- keydown
- keypress
- keyup
Wenn Sie sich bei Maus / berühren Ereignisse suchen, Patrick H. Lauke hat zum Thema . Auf jeden Fall eine interessante Lektüre -. Und beschäftigt sich mit allen Macken von verschiedenen Browsern, verschiedene Geräte und verschiedene Standards
Er bündelt auch eine umfassende Reihe von Tests .