Eventos

Una página que nunca reacciona es solo un documento. En el momento en que quieres que algo suceda cuando una persona hace clic en un botón, escribe en un cuadro de búsqueda o envía un formulario, necesitas una forma de decir "cuando esto sucede, ejecuta este código". Eso es lo que son los eventos. Este capítulo trata sobre escuchar las cosas que hace un usuario y responder a ellas.
Escuchar un evento
Un evento es algo que sucede en la página: un clic, una pulsación de tecla, un envío de formulario. Para responder a uno, eliges un elemento, nombras el evento que te importa y pasas una función para ejecutar cuando sucede.
Esa función se llama controlador. El método que la conecta es addEventListener:
const button = document.querySelector(".buy-button");
button.addEventListener("click", () => {
console.log("Alguien hizo clic en comprar");
});Léelo de izquierda a derecha: en este botón, escucha "click", y cuando suceda, ejecuta esta función. El controlador se ejecuta cada vez que el evento sucede, no una sola vez. Haz clic tres veces y se ejecuta tres veces.
Los controladores son funciones ordinarias, y los elementos a los que los adjuntas provienen del DOM. Si puedes seleccionar un elemento y escribir una función, puedes responder a lo que el usuario hace con él.
"click", y dale a addEventListener una función para ejecutar. Esa función es el controlador, y se ejecuta cada vez que el evento sucede, no una sola vez. Este método es lo que está detrás de casi todo lo que una página hace en respuesta a ti. El objeto de evento
Cuando el navegador ejecuta tu controlador, le pasa una pieza de información: un objeto de evento que describe lo que sucedió. Captúralo dando a tu controlador un parámetro, usualmente nombrado event:
const button = document.querySelector(".buy-button");
button.addEventListener("click", (event) => {
console.log(event.target); // el elemento en el que se hizo clic
});La parte más útil es event.target: el elemento en el que sucedió el evento. Si el clic fue en el botón, event.target es ese botón. No tienes que seleccionarlo de nuevo, el evento ya te dice de dónde vino.
event para capturarlo. La parte que alcanzarás con más frecuencia es event.target, el elemento en el que sucedió el evento. No necesitas volver a seleccionarlo, el evento ya sabe de dónde vino. Eventos comunes
Un puñado de eventos cubre la mayoría de lo que construirás:
click: el usuario hace clic o toca algo.input: el valor de un campo de texto cambia mientras escribe.submit: se envía un formulario.keydown: se presiona una tecla.
El complicado es submit. Por defecto, enviar un formulario recarga la página, lo que borra cualquier cosa que tu JavaScript estuviera haciendo. Para evitar eso, llama a event.preventDefault() dentro del controlador:
const form = document.querySelector("form");
form.addEventListener("submit", (event) => {
event.preventDefault(); // evita que la página se recargue
console.log("Formulario enviado, la página permanece en su lugar");
});click, input, submit, y keydown. El que debes recordar es submit: un formulario recarga la página por defecto, así que llama a event.preventDefault() en el controlador para evitar eso y mantener el control. Piérdelo y tu página se actualiza bajo tus pies, lo cual es confuso la primera vez. Por dónde van los eventos desde aquí
Los eventos son cómo una página escucha. Eliges un elemento, nombras lo que te importa, y ejecutas una función cuando sucede, leyendo los detalles del objeto de evento mientras avanzas. Casi cada característica interactiva está construida a partir de ese bucle.
El siguiente paso natural es hacer algo lento en un controlador, como enviar un formulario a un servidor o cargar datos frescos, sin congelar la página. Eso es lo que el código async es para eso, y es el próximo capítulo. Los controladores que se cuelan en datos estructurados, como una lista de elementos que mantienes en objetos, también dependen de lo que ya sabes.

