Domanda

Quale ordine di precedenza sono gli eventi gestiti in JavaScript?

Ecco gli eventi in ordine alfabetico ...

  1. onabort - Il caricamento di un'immagine è interrotta
  2. onblur - Un elemento perde lo stato attivo
  3. onchange - L'utente cambia il contenuto di un campo
  4. onclick: il mouse fa clic su un oggetto
  5. ondblclick - Il mouse fa doppio clic su un oggetto
  6. onerror - Si verifica un errore quando caricamento di un documento o di un'immagine
  7. onfocus - Un elemento ottiene lo stato attivo
  8. onkeydown - Un tasto della tastiera è premuto
  9. onkeypress - Un tasto della tastiera è premuto o tenuto premuto
  10. onkeyup: un tasto della tastiera è  rilasciato
  11. onload - Una pagina o un'immagine è  caricamento completato
  12. onmousedown - Un pulsante del mouse è  premuto
  13. onmousemove - Il mouse viene spostato
  14. onmouseout - Il mouse viene spostato  un elemento
  15. onmouseover - Il mouse viene spostato  sopra un elemento
  16. onmouseup - Un pulsante del mouse è  rilasciato
  17. onreset: il pulsante di ripristino è  cliccato
  18. onresize - Una finestra o cornice è  ridimensionato
  19. onselect - Il testo è selezionato
  20. onsubmit - Il pulsante di invio è  cliccato
  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 così credo.

È stato utile?

Soluzione

Questo, per quanto ne so, non è stato definito esplicitamente in passato. Browser diversi sono liberi di implementare l'ordinamento degli eventi come preferiscono. Mentre la maggior parte sono abbastanza vicini per tutti gli scopi pratici, ci sono stati e continuano ad esserci alcuni casi limite strani in cui i browser differiscono in qualche modo (e, naturalmente, i molti altri casi in cui alcuni browser non riescono a inviare determinati eventi affatto ).

Detto questo, la bozza di raccomandazione HTML 5 tenta di specificare come verranno messi in coda e inviati gli eventi - il ciclo degli eventi :

  

Per coordinare eventi, utente   interazione, script, rendering,   rete e così via, agenti utente   deve utilizzare loop di eventi come descritto in   questa sezione.

     

Deve esserci almeno un loop di eventi   per agente utente e al massimo un evento   loop per unità di correlati   contesti di navigazione di origine simile.

     

Un ciclo di eventi ha una o più attività   code. Una coda di attività è ordinata   elenco delle attività [...]   Quando un agente utente deve mettere in coda un'attività,   deve aggiungere l'attività specificata a una delle   le code delle attività dell'evento rilevante   ciclo continuo. Tutti i compiti da uno   la fonte di attività particolare deve essere sempre   aggiunto alla stessa coda di attività, ma   attività da diverse fonti di attività possono   essere collocato in diverse code di attività.   [...]

     

[...] un agente utente potrebbe avere una coda di attività   per eventi del mouse e dei tasti (l'utente   sorgente dell'attività di interazione) e un'altra   per tutto il resto. L'agente utente   potrebbe quindi dare tastiera e mouse   preferenza eventi rispetto ad altre attività   tre quarti del tempo, mantenendo   l'interfaccia è reattiva ma non   morire di fame altre code di attività e mai   elaborazione di eventi da qualsiasi attività   fonte fuori servizio. [...]

Nota l'ultimo bit: spetta all'implementazione del browser determinare quali eventi verranno raggruppati ed elaborati in ordine, nonché la priorità data a qualsiasi tipo particolare di evento. Pertanto, ci sono poche ragioni per aspettarsi che tutti i browser invino tutti gli eventi in un ordine fisso, ora o in futuro.

Altri suggerimenti

Per chiunque desideri conoscere la sequenza in cui vengono chiamati gli eventi relativi, vedere di seguito. Finora ho provato solo in Chrome.

  1. passaggio del mouse
  2. mousemove
  3. mouseout

  1. mousedown
  2. modifica (su input focalizzato)
  3. sfocatura (sull'elemento focalizzato)
  4. focus
  5. mouseup
  6. fai clic
  7. dblclick

  1. keydown
  2. pressione del tasto
  3. keyup

Se stai osservando eventi mouse / touch, Patrick H. Lauke ha pubblicato un discorso sull'argomento . Sicuramente una lettura interessante - e affronta tutte le stranezze di diversi browser, dispositivi diversi e standard diversi.

Raggruppa anche un set completo di test .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top