Capítulo 10: El Flujo de Eventos (Propagation)
Entender cómo se propagan los eventos es crucial para dominar JavaScript en el navegador. Este capítulo cubre uno de los conceptos más importantes: el bubbling y la delegación de eventos.
10.1. Las 3 fases: Capturing, Target, Bubbling
Cuando ocurre un evento, el navegador lo procesa en tres fases:
Capturing (Fase de Captura): El evento baja desde
windowhasta el elemento objetivoTarget (Fase de Objetivo): El evento llega al elemento que disparó la acción
Bubbling (Fase de Burbujeo): El evento sube desde el elemento objetivo hacia
window
Visualización:
window (Capturing) → document → body → div (Target) → body → document → window (Bubbling)
↓
Desciende ↓ Asciende
Se ejecuta el
evento aquí10.2. Entendiendo el Bubbling (Burbujeo)
Bubbling significa que un evento en un elemento "sube" hacia sus ancestros. Si registras un listener en un elemento padre, se ejecutará incluso si el evento ocurrió en un hijo.
<div class="padre">
<button class="hijo">Haz clic</button>
</div>Importante: No todos los eventos hacen bubbling. Por ejemplo, focus NO hace bubbling, pero click SÍ.
10.3. stopPropagation() y stopImmediatePropagation()
stopPropagation() y stopImmediatePropagation()stopPropagation()
stopPropagation()Detiene la propagación hacia arriba (no llega a los ancestros).
stopImmediatePropagation()
stopImmediatePropagation()Detiene la propagación Y evita que se ejecuten otros listeners en el mismo elemento.
10.4. Event Delegation: El patrón de oro
Event Delegation significa registrar un listener en un elemento padre que captura eventos de muchos elementos hijo. Esto es extremadamente eficiente para listas dinámicas.
Problema sin delegación (ineficiente):
Solución con delegación (eficiente):
Patrón mejorado con closest():
closest():10.5. Casos prácticos de delegación
Caso 1: Tabla con botones dinámicos
Caso 2: Carrito de compras
10.6. Captura (Capturing Phase) - Uso avanzado
Por defecto, los listeners se registran en la fase de bubbling. Para registrarse en la fase de captura, usa el tercer parámetro:
Esto es raro que se necesite, pero en casos muy específicos de frameworks es útil.
Resumen del Capítulo
El bubbling es lo que permite la delegación de eventos, una técnica fundamental para aplicaciones eficientes. En lugar de registrar miles de listeners, registra uno en el padre y usa evento.target para identificar quién disparó el evento. Esta es la base de los frameworks modernos como React.
💡 Conceptos Clave:
Captura, Target, Bubbling: Las tres fases de un evento
Bubbling: El evento "sube" hacia los ancestros
stopPropagation(): Evita que el evento suba
stopImmediatePropagation(): Evita propagación y otros listeners
Event Delegation: Usar un listener en el padre para muchos hijos
evento.target: El elemento que disparó el evento
closest(): Subir hasta encontrar un selector (ideal con delegación)
Eficiencia: Delegación es mucho más rápida que muchos listeners
🤔 Preguntas de Reflexión:
¿Por qué es importante entender el bubbling?
¿Cuál es la diferencia entre
stopPropagation()ystopImmediatePropagation()?¿Cuándo usarías event delegation?
¿Cómo usarías
evento.targetpara identificar el elemento clicado?¿Por qué la delegación es más eficiente que registrar listeners individuales?
Crea una lista donde cada item puede ser clicado para cambiar de color, usando delegación.
Última actualización
¿Te fue útil?