Priorité des événements DOM
-
08-07-2019 - |
Question
Quel est l'ordre de priorité des événements gérés en JavaScript?
Voici les événements par ordre alphabétique ...
- onabort - Le chargement d'une image est interrompu
- onblur - Un élément perd le focus
- onchange - L'utilisateur modifie le contenu d'un champ
- onclick - Clics de souris sur un objet
- ondblclick - La souris double-clique sur un objet
- onerror - Une erreur se produit lorsque chargement d'un document ou d'une image
- onfocus - Un élément obtient le focus
- onkeydown - Une touche du clavier est pressé
- onkeypress - Une touche du clavier est enfoncé ou maintenu enfoncé
- onkeyup - Une touche du clavier est publié
- onload - Une page ou une image est chargement terminé
- onmousedown - Un bouton de la souris est pressé
- onmousemove - La souris est déplacée
- onmouseout - La souris est déplacée un élément
- onmouseover - La souris est déplacée sur un élément
- onmouseup - Un bouton de souris est publié
- onreset - Le bouton de réinitialisation est cliqué sur
- onresize - Une fenêtre ou un cadre est redimensionné
- onselect - le texte est sélectionné
- onsubmit - Le bouton d'envoi est cliqué sur
- onunload - l'utilisateur quitte la page
Quel ordre sont-ils traités en dehors de la file d'attente des événements?
La priorité n'est pas premier entré, premier sorti (FIFO) ou du moins je le crois.
La solution
Pour autant que je sache, ce n’était pas explicitement défini par le passé. Différents navigateurs sont libres d’implémenter la commande d’événements à leur convenance. Bien que la plupart soient suffisamment proches pour des raisons pratiques, il existe encore et toujours des cas étranges où les navigateurs diffèrent quelque peu (et, bien sûr, beaucoup plus de cas où certains navigateurs ne parviennent pas à envoyer certains événements du tout ).
Cela dit, le projet de recommandation HTML 5 tente de spécifier comment les événements seront mis en file d'attente et distribués - la boucle d'événements :
Pour coordonner les événements, l'utilisateur interaction, scripts, rendu, la mise en réseau, etc., les agents utilisateurs doit utiliser des boucles d'événement comme décrit dans cette section.
Il doit y avoir au moins une boucle d'événement par agent d'utilisateur et au plus un événement boucle par unité de connexe contextes de navigation d'origine similaire.
Une boucle d'événement a une ou plusieurs tâches. les files d'attente. Une file d'attente est une commande liste des tâches [...] Lorsqu'un agent utilisateur doit mettre une tâche en file d'attente, il doit ajouter la tâche donnée à l'un des les files d'attente de tâches de l'événement concerné boucle. Toutes les tâches d'un source de tâche particulière doit toujours être ajouté à la même file d'attente de tâches, mais tâches de différentes sources de tâches peuvent être placé dans différentes files d'attente. [...]
[...] un agent d'utilisateur peut avoir une file d'attente de tâches pour la souris et les événements clés (l'utilisateur la source de la tâche d’interaction), et une autre pour tout le reste. L'agent utilisateur pourrait alors donner le clavier et la souris préférence des événements par rapport à d'autres tâches les trois quarts du temps, en gardant l'interface sensible mais pas affamer d'autres files d'attente de tâches, et jamais traitement des événements d'une tâche quelconque source en panne. [...]
Notez ce dernier bit: il appartient au navigateur de déterminer les événements qui seront regroupés et traités dans l’ordre, ainsi que la priorité donnée à un type d’événement particulier. Par conséquent, il est peu probable que tous les navigateurs envoient tous tous les événements dans un ordre fixe, maintenant ou à l'avenir.
Autres conseils
Pour ceux qui souhaitent connaître la séquence, les événements relatifs sont appelés, voir ci-dessous. Jusqu'à présent, je n'ai testé que sur Chrome.
- survolez
- déplacez la souris
- mouseout
- mousedown
- changer (sur l'entrée ciblée)
- flou (sur l'élément ciblé)
- focus
- mouseup
- cliquez sur
- dblclick
- keydown
- appuyez sur la touche
- keyup
Si vous regardez les événements touchant la souris ou le toucher, Patrick H. Lauke a publié un conférence. sur le sujet . Certainement une lecture intéressante - et traite de toutes les bizarreries de différents navigateurs, de différents appareils et de différentes normes.
Il regroupe également un ensemble complet de tests .