Qual è la precedenza dell’evento in JavaScript?

Quale ordine di precedenza sono gli eventi gestiti in JavaScript?

Ecco gli eventi in ordine alfabetico …

  1. onabort – Il caricamento di un’immagine è interrotto
  2. onblur: un elemento perde lo stato attivo
  3. onchange: l’utente modifica il contenuto di un campo
  4. onclick: il mouse fa clic su un object
  5. ondblclick: il mouse fa doppio clic su un object
  6. onerror: si verifica un errore durante il caricamento di un documento o di un’immagine
  7. onfocus: un elemento diventa focalizzato
  8. onkeydown – Viene premuto un tasto della tastiera
  9. onkeypress – Un tasto della tastiera viene premuto o tenuto premuto
  10. onkeyup: viene rilasciato un tasto della tastiera
  11. onload – Una pagina o un’immagine è stata caricata
  12. onmousedown – Viene premuto un pulsante del mouse
  13. onmousemove – Il mouse viene spostato
  14. onmouseout – Il mouse viene spostato da un elemento
  15. onmouseover – Il mouse viene spostato su un elemento
  16. onmouseup: viene rilasciato un pulsante del mouse
  17. onreset – Viene cliccato il pulsante di reset
  18. onresize – Una finestra o una cornice viene ridimensionata
  19. onselect – Il testo è selezionato
  20. onsubmit: viene fatto clic sul pulsante di invio
  21. onunload – L’utente esce dalla pagina

Quale ordine vengono gestiti dalla coda degli eventi?

La precedenza non è first-in-first-out (FIFO) o almeno credo.

Questo non era, per quanto ne so, esplicitamente definito in passato. I diversi browser sono liberi di implementare l’ordine degli eventi come ritengono opportuno. Mentre la maggior parte sono abbastanza vicini per tutti gli scopi pratici, ci sono stati e continuano ad esserci alcuni casi limite in cui i browser differiscono in qualche modo (e, naturalmente, molti altri casi in cui alcuni browser non riescono a inviare determinati eventi).

Detto questo, la proposta di bozza HTML 5 fa un tentativo di specificare come verranno accodati e inviati gli eventi : il ciclo degli eventi :

Per coordinare eventi, interazione utente, script, rendering, networking e così via, i programmi utente devono utilizzare i loop di eventi come descritto in questa sezione.

Ci deve essere almeno un ciclo di eventi per agente utente e al massimo un ciclo di eventi per unità di contesti di navigazione di origine simile correlati.

Un ciclo di eventi ha una o più code di attività. Una coda di attività è un elenco ordinato di attività […] Quando un agente utente deve accodare un’attività, è necessario aggiungere l’attività specificata a una delle code di attività del ciclo di eventi pertinente. Tutte le attività da una determinata origine di attività devono sempre essere aggiunte alla stessa coda di attività, ma le attività da diverse origini di attività possono essere inserite in code di attività diverse. […]

[…] un agente utente potrebbe avere una coda di attività per gli eventi di mouse e chiave (l’origine dell’attività di interazione dell’utente) e un’altra per tutto il resto. L’agente utente potrebbe quindi dare agli eventi di tastiera e mouse la preferenza su altre attività per tre quarti del tempo, mantenendo l’interfaccia retriggers ma non affogando altre code di attività e non elaborando mai eventi da una qualsiasi sorgente di attività senza ordine. […]

Nota bene: dipende dall’implementazione del browser per determinare quali eventi saranno raggruppati ed elaborati in ordine, così come la priorità assegnata a un particolare tipo di evento. Pertanto, non c’è motivo di aspettarsi che tutti i browser inviino tutti gli eventi in un ordine fisso, ora o in futuro.

Per tutti coloro che vogliono sapere che gli eventi relativi alla sequenza vengono richiamati, vedi sotto. Finora ho provato solo su Chrome.

  1. mouseover
  2. MouseMove
  3. mouseout

  1. mousedown
  2. cambia (su input focalizzato)
  3. sfocatura (sull’elemento focalizzato)
  4. messa a fuoco
  5. MouseUp
  6. clic
  7. DblClick

  1. keydown
  2. pressione di un tasto
  3. keyup

Se stai guardando gli eventi mouse / touch, Patrick H. Lauke ha pubblicato un discorso sull’argomento . Sicuramente una lettura interessante – e si occupa di tutte le stranezze di diversi browser, dispositivi diversi e standard diversi.

Inoltre raggruppa una serie completa di test .