CodeForge

Maquetación Web Dinámica / JavaScript para maquetadores: darle vida al DOM

Eventos y listeners: reaccionar a todo

Teoría20 min20 XP

Una interfaz viva REACCIONA: al clic, a lo que escribes, al envío de un formulario, a una tecla. Cada una de esas cosas es un EVENTO, y tú "escuchas" los que te importan para responder. Ya usaste addEventListener para el clic; hoy lo dominas de verdad, junto al objeto event que trae los detalles de qué acaba de pasar.

El sensor y el aviso

Escuchar eventos

eventos.js

El primer argumento es el NOMBRE del evento ("click", "input", "submit", "keydown"...), el segundo es la función que corre cuando ocurre. Esa función recibe el objeto event con todo el contexto.

El objeto event: la nota con los detalles

event.js
campo.addEventListener("input", (event) => {
// event.target = el elemento que disparó el evento
const texto = event.target.value;   // lo que hay escrito
const largo = texto.length;
});

document.addEventListener("keydown", (event) => {
console.log(event.key);   // "Enter", "Escape", "a", " " (espacio)...
});

Los tres que más usarás: event.target (el elemento concreto que disparó el evento — clave en la próxima lección), event.target.value (el contenido de un input), y event.key (la tecla, por nombre). Hay muchos más (event.clientX/Y para la posición del mouse, que ya usaste en canvas), pero con estos cubres casi todo.

preventDefault: cancelar lo que el navegador haría solo

Algunos elementos tienen comportamiento POR DEFECTO: un <form> al enviarse RECARGA la página; un enlace navega. preventDefault() cancela ese default para que TÚ manejes la acción con JS:

Escribe (mira el contador subir en vivo con input) y envía (el mensaje aparece sin recargar, gracias a preventDefault). Sin ese preventDefault, el formulario recargaría la página y perderías todo — es la línea que te da control sobre el envío para validarlo o mandarlo con JS.

Tu formulario de búsqueda 'parpadea' y se resetea cada vez que lo envías: la página se recarga entera. ¿Qué falta en el listener de submit?

Mini-reto

Hazle a "El Observador" un buscador en vivo: un input que, con el evento input, filtre las tarjetas de noticia mostrando solo las que contienen el texto escrito (combina event.target.value con classList para ocultar/mostrar). Y captura keydown de Escape para limpiar el buscador. Dos eventos, cero recargas — la sensación de una app moderna.

Qué sigue

Pusiste un listener en un botón. ¿Pero qué haces cuando tienes CIEN botones —o una lista que crece— y no quieres cien listeners? La próxima lección enseña la delegación de eventos: un solo listener inteligente que atiende a todos sus hijos, presentes y futuros. El truco que hace tu código escalable.