Eventos del DOM en JavaScript: Guía completa para principiantes

Aprende a manejar eventos del DOM en JavaScript. Descubre cómo usar addEventListener, tipos de eventos y ejemplos prácticos paso a paso.
¿Qué son los eventos del DOM en JavaScript?
Los eventos del DOM (Document Object Model) en JavaScript son acciones o sucesos que ocurren en el navegador y que pueden ser detectados y manejados mediante código. Estos eventos pueden ser generados por el usuario, como hacer clic en un botón, mover el ratón, presionar una tecla, o pueden ser eventos del sistema, como la carga de una página o la finalización de una solicitud de red.
Ciclo de vida de un evento: desde que ocurre hasta que se procesa
Cuando un evento ocurre en el DOM, sigue un ciclo de vida que incluye varias fases:
-
Captura: El evento se propaga desde el elemento raíz del DOM hacia el elemento objetivo. Durante esta fase, los manejadores de eventos registrados para la fase de captura se ejecutan.
-
Objetivo: El evento llega al elemento objetivo donde ocurrió la acción. Aquí, los manejadores de eventos registrados directamente en el elemento objetivo se ejecutan.
-
Burbuja: El evento se propaga de vuelta desde el elemento objetivo hacia el elemento raíz del DOM. Durante esta fase, los manejadores de eventos registrados para la fase de burbuja se ejecutan.
Diferencia entre eventos inline y addEventListener()
Eventos inline
Son aquellos que se definen directamente en el HTML utilizando atributos como onclick, onmouseover, etc. Por ejemplo:
<button onclick="alert('¡Hola!')">Haz clic aquí</button>
Ventajas:
- Fácil de implementar para eventos simples.
Desventajas:
- Mezcla de HTML y JavaScript, lo que puede dificultar el mantenimiento del código.
- No permite agregar múltiples manejadores de eventos al mismo elemento.
addEventListener()
Es un método de JavaScript que permite agregar manejadores de eventos a elementos del DOM de manera más flexible. Por ejemplo:
const button = document.querySelector("button");
button.addEventListener("click", () => {
alert("¡Hola!");
});
Ventajas:
-
Separa el HTML del JavaScript, mejorando la organización del código.
-
Permite agregar múltiples manejadores de eventos al mismo elemento.
Desventajas:
- Requiere un poco más de código para configurarlo.
Cómo usar addEventListener para manejar eventos
Para usar addEventListener, primero debes seleccionar el elemento del DOM al que deseas agregar el evento. Luego, llamas al método addEventListener, pasando como argumentos el tipo de evento y la función que se ejecutará cuando ocurra el evento.
const button = document.querySelector("button");
button.addEventListener("click", () => {
alert("¡Hola!");
});
Tipos comunes de eventos en JavaScript
Eventos de mouse: click, dblclick, mouseover, mouseout, mousemove
const button = document.querySelector("button");
button.addEventListener("click", () => {
console.log("Botón clickeado");
});
button.addEventListener("dblclick", () => {
console.log("Botón doble clickeado");
});
button.addEventListener("mouseover", () => {
console.log("Mouse sobre el botón");
});
button.addEventListener("mouseout", () => {
console.log("Mouse fuera del botón");
});
button.addEventListener("mousemove", (event) => {
console.log(`Mouse moviéndose en: (${event.clientX}, ${event.clientY})`);
});
Eventos de teclado: keydown, keyup, keypress
const input = document.querySelector("input");
input.addEventListener("keydown", (event) => {
console.log(`Tecla presionada: ${event.key}`);
});
input.addEventListener("keyup", (event) => {
console.log(`Tecla liberada: ${event.key}`);
});
input.addEventListener("keypress", (event) => {
console.log(`Tecla presionada (keypress): ${event.key}`);
});
Eventos de formulario: submit, change, input, focus, blur
const form = document.querySelector("form");
form.addEventListener("submit", (event) => {
event.preventDefault(); // Evita el envío del formulario
console.log("Formulario enviado");
});
const input = document.querySelector("input");
input.addEventListener("change", () => {
console.log("El valor del input ha cambiado");
});
input.addEventListener("input", () => {
console.log("El usuario está escribiendo");
});
input.addEventListener("focus", () => {
console.log("Input enfocado");
});
input.addEventListener("blur", () => {
console.log("Input desenfocado");
});
Eventos de ventana: load, resize, scroll, unload
window.addEventListener("load", () => {
console.log("Página cargada");
});
window.addEventListener("resize", () => {
console.log("Ventana redimensionada");
});
window.addEventListener("scroll", () => {
console.log("Página desplazada");
});
window.addEventListener("unload", () => {
console.log("Página descargada");
});