Saltar al contenido

Manejo de eventos en el DOM

Introducción a los eventos de JavaScript

JavaScript son acciones o sucesos que ocurren en el navegador y que pueden ser detectados y respondidos por JavaScript. Los eventos son una parte fundamental del desarrollo web, ya que nos permiten crear aplicaciones web interactivas. En este artículo, profundizaremos en los eventos más comunes, cómo agregar y eliminar event listeners, y proporcionaremos ejemplos prácticos para ayudarte a dominar los eventos de JavaScript.

Eventos comunes en JavaScript

Evento click

El evento click se produce cuando el usuario hace clic en un elemento. Es uno de los eventos más utilizados.


html
<button id="clickButton">Click Me</button>

<script>
  document.getElementById("clickButton").addEventListener("click", function () {
    alert("Button was clicked!");
  });
</script>

En este ejemplo, se agrega un event listener a un botón con el ID clickButton. Cuando se hace clic en el botón, aparecerá un cuadro de alerta con el mensaje "¡Se hizo clic en el botón!".

Evento mouseover

El evento mouseover se produce cuando el puntero del mouse se mueve sobre un elemento.


html
<p id="mouseoverText">Hover over me!</p>

<script>
  document.getElementById("mouseoverText").addEventListener("mouseover", function () {
    this.style.color = "red";
  });
</script>

En este ejemplo, se agrega un event listener a un párrafo con el ID mouseoverText. Cuando el mouse se desplaza sobre el párrafo, su color de texto cambia a rojo.

Evento keydown

El evento keydown se produce cuando el usuario presiona una tecla en el teclado.


html
<input type="text" id="inputField" placeholder="Type something..." />

<script>
  document.getElementById("inputField").addEventListener("keydown", function (event) {
    alert(`Key pressed: ${event.key}`);
    this.value = '';
  });
</script>

En este ejemplo, se agrega un event listener a un campo de entrada con el ID inputField. Cuando se presiona una tecla mientras el campo de entrada está enfocado, la tecla presionada se muestra en un cuadro de alerta.

Agregar event listeners

El método addEventListener()

El método addEventListener() adjunta un manejador de eventos a un elemento sin sobrescribir los manejadores existentes. Este método proporciona una forma de agregar múltiples event listeners a un solo elemento.


html
<button id="multiEventButton">Click or Hover</button>

<script>
  const button = document.getElementById("multiEventButton");

  button.addEventListener("click", function () {
    alert("Button clicked!");
  });

  button.addEventListener("mouseover", function () {
    button.style.backgroundColor = "lightblue";
  });
</script>

En este ejemplo, se agregan dos event listeners al botón con el ID multiEventButton. Uno activa una alerta cuando se hace clic en el botón, y el otro cambia el color de fondo del botón cuando el mouse se desplaza sobre él.

INFO

Utiliza addEventListener() para adjuntar múltiples event listeners al mismo elemento sin sobrescribir los manejadores existentes.

Eliminar event listeners

El método removeEventListener()

El método removeEventListener() elimina un manejador de eventos que fue adjuntado con addEventListener().


html
<button id="removeEventButton">Click Me</button>

<script>
  function showAlert() {
    alert("This will be removed after first click");
  }

  const button = document.getElementById("removeEventButton");
  button.addEventListener("click", showAlert);

  button.addEventListener("click", function () {
    button.removeEventListener("click", showAlert);
  });
</script>

En este ejemplo, se agrega un event listener que activa una alerta al botón con el ID removeEventButton. Se agrega otro event listener para eliminar el listener de la alerta después del primer clic. Ten en cuenta que removeEventListener requiere una referencia al mismo objeto de función exacto utilizado en addEventListener. Por esta razón, las funciones anónimas no se pueden eliminar más tarde: cada declaración crea un nuevo objeto de función distinto.

INFO

Aprovecha la delegación de eventos para un mejor rendimiento, especialmente cuando trabajas con una gran cantidad de elementos hijos.

Mejores prácticas

Utiliza la delegación de eventos

Agrega un solo event listener a un elemento padre para gestionar los eventos de todos los elementos hijos. Esto mejora el rendimiento y reduce la cantidad de event listeners.

Evita funciones anónimas para manejadores de eventos

El uso de funciones con nombre para manejadores de eventos facilita su eliminación posterior y mejora la legibilidad del código.

Limpia los event listeners

Asegúrate de eliminar los event listeners cuando ya no sean necesarios para evitar fugas de memoria y mejorar el rendimiento.

Minimiza la cantidad de event listeners

Adjunta event listeners a elementos de nivel superior en lugar de numerosos elementos individuales para reducir el uso de memoria y mejorar el rendimiento.

Utiliza la opción once en addEventListener

Utiliza la opción once para eliminar automáticamente el event listener después de que se active una vez, evitando posibles fugas de memoria.

js
button.addEventListener("click", function handler() {
  console.log("Triggered once");
}, { once: true });

Previene acciones predeterminadas y detén la propagación de manera adecuada

Utiliza event.preventDefault() y event.stopPropagation() de manera prudente para controlar el comportamiento de los eventos sin interferir con otros manejadores.

Aplica debounce o throttle a los manejadores de eventos

Utiliza técnicas de debouncing o throttling para optimizar el rendimiento de los manejadores de eventos que se activan con frecuencia, como los eventos de scroll o resize.

Conclusión

Dominar los eventos de JavaScript es fundamental para crear aplicaciones web dinámicas e interactivas. Al comprender cómo utilizar eventos como click, mouseover y keydown, y cómo agregar y eliminar event listeners con addEventListener() y removeEventListener(), podrás mejorar significativamente las interacciones del usuario en tus páginas web.

Práctica

¿Cuáles de las siguientes afirmaciones sobre el manejo de eventos en el DOM son verdaderas?

¿Te resulta útil?

Vista previa dual-run — compárala con las rutas Symfony en producción.