Código Real
Apóyame
JavaScript

Curso de JavaScript

Dale vida a la web.

Aprende a programar, crea interacciones y construye proyectos reales.

Delegación de eventos

En vez de agregar un listener a cada elemento hijo, puedes agregar uno solo al elemento padre y usar evento.target para saber cuál de los hijos lo disparó. Esto se llama delegación de eventos.

Cargando editor...
Resultado
Preparando resultado...
Agrega una nueva tarea con el botón y haz clic sobre ella: se marca como completada igual que las que ya existían, sin agregar ningún addEventListener nuevo.

Explicación

En vez de un listener por cada elemento hijo, delegas la escucha al elemento padre:

Delegación de eventos

Agregar un solo addEventListener al elemento padre (como el <ul>) en vez de uno por cada hijo, y usar el evento para saber cuál disparó.

evento.target

La referencia exacta al elemento donde ocurrió el evento (el <li> específico), aunque el listener esté en el <ul>.

evento.target.tagName

El nombre de la etiqueta del elemento en mayúsculas (como "LI"), útil para confirmar qué tipo de elemento generó el evento.

Bubbling (propagación)

Un evento que ocurre en un elemento hijo también sube y se puede detectar en sus elementos padres; es lo que hace posible la delegación.

Reto rápido

Agrega dos tareas nuevas con el botón y márcalas como completadas haciendo clic sobre ellas, sin modificar el JavaScript.

En esta lección

  • Ejemplo interactivo
  • Explicación de cada etiqueta
  • Cuándo usarlo
  • Errores comunes

Consejo

La delegación es especialmente útil con elementos creados dinámicamente (como con createElement): no necesitas registrar un addEventListener en cada uno, el del padre ya los cubre a todos automáticamente.

Dato extra

Delegar también es más eficiente en listas largas: en vez de cientos de listeners (uno por elemento), el navegador solo mantiene uno solo en el elemento padre.

Error común

No validar evento.target.tagName antes de actuar: si haces clic en un espacio vacío del <ul> (no sobre un <li>), evento.target sería el propio <ul>, y sin esa validación el código intentaría aplicar classList.toggle al elemento equivocado.

Siguiente paso

Ya sabes reaccionar a clics, envíos de formulario y delegar eventos a elementos padres. En el siguiente módulo vas a conectar tu página con el mundo exterior: peticiones fetch y almacenamiento en el navegador.

Ir a la siguiente lección