2012-09-25 20 views
6

Entiendo que un evento tiene dos modos: burbujeo y captura.Burbujeo/captura de eventos: ¿dónde comienza/finaliza?

Cuando un evento está configurado para burbujear, ¿JavaScript comprueba en "documento"?

Cuando se configura un evento para capturar, ¿JavaScript siempre comienza desde "documento"?

¿Cómo sabe Javascript dónde detener/iniciar?

Actualización:

Digamos que tengo el siguiente código en mi cuerpo de la etiqueta.

<div id='outer'> 
    <div id='inner'></div> 
</div> 

Cuando me puse un evento para #interno a burbujear, le examina Javascript para documentos o se detiene en #externo?

+2

Artículo muy informativo de quirksmode: http://www.quirksmode.org/js/events_order.html – techfoobar

+1

@techfoobar// De hecho, leí ese artículo, pero no está claro si Javascript comprueba para documentar o se detiene en el elemento principal. – Moon

+1

Si se detuvo en el exterior, ¿cómo sabría si hubiera algún detector de eventos en document.body o similar? –

Respuesta

2

evento de propagación

JavaScript comprueba todo el camino hasta documentar. Si agrega un oyente en el documento y un oyente en el interior, ambos oyentes disparan.

captura de eventos

JavaScript comienza a partir del documento y va todo el camino hasta interna. Si agrega un oyente en el documento y un oyente en el interior, ambos oyentes disparan.


mis hallazgos

resulta que el navegador hace algún tipo de procesamiento inteligente de modo que

a) no tiene que recorrer toda la jerarquía de los padres

y

b) no tiene que recorrer todos los eventos.


Prueba

a) Se necesita el navegador hay tiempo para activar los dos eventos de clic cuando se hace clic en el div interior:

Fiddle

b) Se necesita el navegador no hay tiempo para desencadenar ambos eventos de clic cuando se hace clic en el div interno cuando existen muchos otros eventos que están conectados a otros elementos DOM que no están en la jerarquía principal:

Fiddle

+0

Event Bubbling // incluso si el documento no tiene un evento? – Moon

+0

Respuesta editada ... –

1

respuesta parcial ..

1 - Cuando un evento se establece en la burbuja, le examina Javascript hasta "documento"?

No si uno de los elementos en la jerarquía decide parar el burbujeo llamando stopPropagation()

5

De W3C Document Object Model Events

Sé que estoy aburriendo pero no es javascript que maneja los eventos usted está describiendo, es el motor DOM (Modelo de Objetos de Documento). En el navegador hay enlaces entre los motores JavaScript y DOM para que los eventos se puedan propagar a javascript, pero no está limitado a javascript. Por ejemplo, MSIE tiene soporte para BASIC.

Cuando un evento está configurado para burbujear, ¿JavaScript comprueba en "documento"?

1.2.3 "Esta propagación al alza continuará hasta e incluyendo el Documento"

"Cualquier controlador de eventos puede optar por evitar una mayor propagación de eventos llamando al método stopPropagation de la interfaz de eventos. Si alguna EventListener llama a esto método, todos los EventListeners adicionales en el EventTarget actual se activarán pero el burbujeo cesará en ese nivel "

Cuando se configura un evento para capturar, ¿Javascript siempre comienza desde" documento "?

1.2.2 "Captura opera desde la parte superior del árbol, por lo general el documento,"

Cuestiones relacionadas