2009-10-10 14 views

Répondre

4

Il est très simple. Module DOM Level 2 Events does not specify order dans quel événement les auditeurs doivent être déclenchés. Cependant, DOM niveau 3 modules Events does specify orderd'être le même que l'enregistrement un.

inscrits en premier - ont d'abord tiré.

Notez que le module DOM niveau 3 Events est encore un projet, tandis que le niveau 2 est une recommandation . Néanmoins, les navigateurs modernes suivent souvent la sémantique de cette spécification de niveau 3 au lieu d'une version plus ancienne de niveau 2.

En pratique, IIRC, seulement IE ne respecte pas l'ordre des écouteurs d'événement. Tous les autres navigateurs l'implémentent en tant que FIFO (et comme décrit dans DOM L3 Events). Vous pouvez également trouver related tests online :)

+0

Belles références. –

+0

En effet, je déteste sérieusement IE8 en ce moment car il exécute mes événements dans l'ordre inversé par rapport à tous les autres navigateurs de la planète * y compris * IE7. Grr. – LRE

3

En raison de la nature unique de JavaScript filetée, les événements et les minuteries sont en file d'attente et exécutées de manière séquentielle un à la fois, ils courent quand il y a eu une ouverture dans l'exécution.

Ceci est mieux démontré avec un diagramme:

Events and Timers http://ejohn.org/files/427px-Timers.png

Après le premier bloc se termine son exécution, il y a deux événements asynchrones en attente, la souris Cliquez Callback et la minuterie, le navigateur reprend la souris Cliquez dans cet exemple, et la minuterie attendra jusqu'à ce que la prochaine fois que possible, afin d'exécuter.

Vérifiez ce vraiment bon article sur Timers and Events par John Resig.