Eventos: Escuchar el mundo
🎯 Objetivo
Escuchar eventos (click, submit, keyup) con addEventListener. Interactividad completa.
⚔️ Implementación
// CLICK
const boton = document.querySelector("#btn");
boton.addEventListener("click", () => {
console.log("¡Clic!");
});
// Con parámetro event
boton.addEventListener("click", (e) => {
console.log(e.target); // Elemento clickeado
});
// SUBMIT (formularios)
const form = document.querySelector("form");
form.addEventListener("submit", (e) => {
e.preventDefault(); // Evita recargar página
const nombre = document.querySelector("#nombre").value;
console.log(`Hola, ${nombre}`);
});
// INPUT (detecta escritura)
const input = document.querySelector("#buscar");
input.addEventListener("input", (e) => {
console.log(e.target.value); // Lo que escribiste
});
// KEYUP (tecla soltada)
input.addEventListener("keyup", (e) => {
if (e.key === "Enter") {
console.log("Presionaste Enter");
}
});
// CHANGE (select, checkbox)
const select = document.querySelector("select");
select.addEventListener("change", (e) => {
console.log(e.target.value);
});
// MOUSEENTER/MOUSELEAVE
const caja = document.querySelector(".caja");
caja.addEventListener("mouseenter", () => {
caja.style.backgroundColor = "blue";
});
caja.addEventListener("mouseleave", () => {
caja.style.backgroundColor = "white";
});
// DELEGACIÓN (eventos en elementos dinámicos)
document.querySelector("#lista").addEventListener("click", (e) => {
if (e.target.matches(".item")) {
console.log("Clickeaste un item");
}
});
🎯 Reto Ninja
MISIÓN DE REACCIÓN
⚡ El Eco del Mundo
1
Crea una estructura HTML con un <input id="tarea">, un <button id="agregar"> y una <ul id="lista"> vacía.
2
En JS, selecciona el botón y añade un addEventListener para el evento "click".
3
Al hacer clic, captura el valor del input, crea un nuevo elemento <li> y añádelo a la lista.
4
Limpia el cuadro de texto del input después de agregar la tarea. ¡Tu primera To-Do List está viva!
🔓 Bonus
// Remove listener
const handler = () => console.log("Clic");
btn.addEventListener("click", handler);
btn.removeEventListener("click", handler);
// Once (solo una vez)
btn.addEventListener("click", () => {
console.log("Solo una vez");
}, { once: true });
// Passive (mejor performance)
window.addEventListener("scroll", () => {
console.log("Scroll");
}, { passive: true });
✅ Checklist de Dominio
INTERACTIVIDAD DOMINADA
Pergamino de Reacción
¡FELICIDADES! Has completado el Módulo 2: Frontend 🎉
Ahora eres un ninja Chunin 🗡️. Dominas HTML, CSS y JavaScript.
Próximo desafío: Boss Fight - “El Error Sin Commit”