lista - ¿Cuál es la precedencia del evento en JavaScript?
lista de eventos javascript (3)
Esto no era, hasta donde sé, explícitamente definido en el pasado. Los diferentes navegadores son libres de implementar pedidos de eventos como mejor les parezca. Si bien la mayoría están lo suficientemente cerca para todos los propósitos prácticos, ha habido y siguen existiendo algunos casos de bordes extraños en los que los navegadores difieren un poco (y, por supuesto, los muchos más casos en que ciertos navegadores no envían ciertos eventos).
Dicho esto, el borrador de la recomendación de HTML 5 intenta especificar cómo los eventos se pondrán en cola y se enviarán: el ciclo de eventos :
Para coordinar eventos, interacción del usuario, scripts, renderizado, redes, etc., los agentes de usuario deben usar bucles de eventos como se describe en esta sección.
Debe haber al menos un bucle de evento por agente de usuario, y como máximo un bucle de evento por unidad de contextos de exploración de origen similar relacionados.
Un bucle de evento tiene una o más colas de tareas. Una cola de tareas es una lista ordenada de tareas [...] Cuando un agente de usuario debe poner en cola una tarea, debe agregar la tarea dada a una de las colas de tareas del ciclo de evento relevante. Todas las tareas de una fuente de tarea particular siempre deben agregarse a la misma cola de tareas, pero las tareas de diferentes orígenes de tareas pueden colocarse en diferentes colas de tareas. [...]
[...] un agente de usuario podría tener una cola de tareas para el mouse y eventos clave (la fuente de la tarea de interacción del usuario) y otra para todo lo demás. El agente de usuario podría dar preferencia a los eventos de teclado y mouse sobre otras tareas tres cuartas partes del tiempo, manteniendo la interfaz receptiva pero sin agotar otras colas de tareas, y nunca procesando eventos de cualquier origen de tarea fuera de servicio. [...]
Tenga en cuenta que el último bit: depende de la implementación del navegador determinar qué eventos se agruparán y procesarán en orden, así como la prioridad dada a cualquier tipo particular de evento. Por lo tanto, hay pocas razones para esperar que todos los navegadores envíen todos los eventos en un orden fijo, ahora o en el futuro.
¿Qué orden de precedencia son los eventos manejados en JavaScript?
Aquí están los eventos en orden alfabético ...
- onabort - La carga de una imagen se interrumpe
- onblur - Un elemento pierde el foco
- onchange: el usuario cambia el contenido de un campo
- onclick: el mouse hace clic en un objeto
- ondblclick: el mouse hace doble clic en un objeto
- onerror: se produce un error al cargar un documento o una imagen
- onfocus - Un elemento obtiene enfoque
- onkeydown - Se presiona una tecla del teclado
- onkeypress - Se presiona o mantiene presionada una tecla del teclado
- onkeyup: se libera una tecla del teclado
- onload: se ha terminado de cargar una página o una imagen
- onmousedown: se presiona un botón del mouse
- onmousemove - El mouse se mueve
- onmouseout: el mouse se mueve de un elemento
- onmouseover - El mouse se mueve sobre un elemento
- onmouseup: se lanza un botón del mouse
- onreset: se hace clic en el botón de reinicio
- onresize - Se cambia el tamaño de una ventana o marco
- onselect - El texto está seleccionado
- onsubmit: se hace clic en el botón Enviar
- onunload: el usuario sale de la página
¿Qué orden se manejan fuera de la cola del evento?
La precedencia no es first-in-first-out (FIFO) o eso creo.
Para cualquiera que desee conocer la secuencia de eventos relativos a los que se llama, consulte a continuación. Hasta ahora solo he probado en Chrome.
- ratón sobre
- movimiento del ratón
- mouseout
- ratón hacia abajo
- cambio (en entrada enfocada)
- desenfoque (en el elemento enfocado)
- atención
- mouseup
- hacer clic
- dblclick
- keydown
- presionar tecla
- tecla Arriba
Si está buscando eventos mouse / touch, Patrick H. Lauke ha publicado una charla sobre el tema . Definitivamente una lectura interesante, y trata con todas las peculiaridades de diferentes navegadores, diferentes dispositivos y diferentes estándares.
También agrupa un conjunto completo de pruebas .