jQuery Academy · Lección

Detención de la propagación de eventos

Comprenda .stopPropagation() y .preventDefault() para controlar el flujo de eventos, impedir las acciones predeterminadas del navegador y gestionar eficazmente interacciones complejas entre eventos.

Lección 2 de 311 pasos

Detención de la propagación de eventos es una lección gratuita de jQuery Academy en CoddyKit. Esta es la lección 2 de 3. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de jQuery Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de jQuery Academy incluye 3 lecciones en total.

¡Controle sus eventos!

Los eventos, como los clics o los envíos de formularios, no ocurren únicamente en un elemento. A menudo recorren el Document Object Model (DOM).

Aprender a controlar este flujo es fundamental para crear páginas web precisas e interactivas.

Cómo evitar las acciones predeterminadas

Los navegadores tienen acciones predeterminadas para muchos elementos HTML. Por ejemplo:

  • Al hacer clic en una etiqueta <a>, se navega a una página nueva.
  • Al enviar un <form>, se vuelve a cargar la página.

Usamos event.preventDefault() para detener estos comportamientos integrados del navegador.

`preventDefault()` en acción

Pruebe a hacer clic en el enlace de abajo. Normalmente, le llevaría a example.com, pero .preventDefault() detiene esa navegación.

<!DOCTYPE html>
<html>
<head>
<title>Prevent Default</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
</head>
<body>
  <h1>Prevent Default Example</h1>
  <a href="https://example.com" id="myLink">Click Me! (Should not navigate)</a>
  <div id="output"></div>

  <script>
  $(document).ready(function() {
    $('#myLink').on('click', function(event) {
      event.preventDefault(); // Stop the link from navigating
      $('#output').append('<p>Link click prevented! You\'re still here.</p>');
    });
  });
  </script>
</body>
</html>

Cómo funciona la propagación de eventos

Cuando ocurre un evento en un elemento, como un clic, no solo se ejecutan los controladores de ese elemento. El evento se propaga hacia arriba por el árbol del DOM.

  • Activa los controladores de su elemento padre.
  • Después, los de su elemento abuelo.
  • Y así sucesivamente, hasta llegar a <body> y <html>.

Este desplazamiento hacia arriba se denomina propagación de eventos.

Detenga la propagación: `stopPropagation()`

A veces, desea que un evento sea gestionado únicamente por el elemento en el que se originó o por un elemento padre específico, sin afectar a los elementos de niveles superiores.

Para eso sirve event.stopPropagation(). Este método evita que el evento siga propagándose hacia arriba por el árbol del DOM.

Ejemplo de `stopPropagation()`

Haga clic en el cuadro interior. Sin stopPropagation(), aparecerían ambos mensajes. Con este método, solo aparece el mensaje del cuadro interior porque se detiene la propagación.

<!DOCTYPE html>
<html>
<head>
<title>Stop Propagation</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<style>
  #outer {
    padding: 20px;
    background-color: lightblue;
    border: 1px solid blue;
    margin: 10px;
  }
  #inner {
    padding: 20px;
    background-color: lightcoral;
    border: 1px solid red;
    margin-top: 10px;
  }
</style>
</head>
<body>
  <h1>Stop Propagation Example</h1>
  <div id="outer">
    Outer Div (Click me!)
    <div id="inner">
      Inner Div (Click me!)
    </div>
  </div>
  <div id="log"></div>

  <script>
  $(document).ready(function() {
    $('#outer').on('click', function() {
      $('#log').append('<p>Outer Div clicked!</p>');
    });

    $('#inner').on('click', function(event) {
      event.stopPropagation(); // Stop bubbling here
      $('#log').append('<p>Inner Div clicked!</p>');
    });
  });
  </script>
</body>
</html>

Usos prácticos de detener la propagación

stopPropagation() resulta útil en situaciones como las siguientes:

  • Diálogos modales: evitar que los clics dentro de un modal lo cierren al activar el clic de una superposición.
  • Menús desplegables anidados: mantener abierto un menú desplegable hijo cuando se hace clic en su elemento padre.
  • Componentes de interfaz complejos: garantizar que los controladores de eventos de componentes específicos no interfieran con los listeners globales.

El objeto de evento

Tanto .preventDefault() como .stopPropagation() son métodos del objeto de evento. Este objeto se pasa como argumento a la función controladora del evento.

El objeto de evento contiene mucha información útil sobre el evento ocurrido, como su tipo, el elemento de destino y las coordenadas del ratón.

<!DOCTYPE html>
<html>
<head>
<title>Event Object</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
</head>
<body>
  <h1>Event Object Properties</h1>
  <button id="myButton">Click Me</button>
  <div id="output"></div>

  <script>
  $(document).ready(function() {
    $('#myButton').on('click', function(event) {
      $('#output').empty(); // Clear previous output
      $('#output').append('<p>Event Type: <code>' + event.type + '</code></p>');
      $('#output').append('<p>Target Element ID: <code>' + event.target.id + '</code></p>');
      $('#output').append('<p>Mouse X Position: <code>' + event.pageX + '</code></p>');
      $('#output').append('<p>Mouse Y Position: <code>' + event.pageY + '</code></p>');
    });
  });
  </script>
</body>
</html>

Combinar ambos métodos

A veces, necesita usar .preventDefault() y .stopPropagation() a la vez. Cada uno resuelve un problema diferente:

  • .preventDefault(): detiene la acción predeterminada del navegador.
  • .stopPropagation(): evita que el evento recorra el DOM hacia arriba.

Por ejemplo, un botón dentro de un componente complejo podría necesitar evitar su comportamiento predeterminado al hacer clic Y detener el clic para que no active los controladores del elemento padre.

Comprender el control de eventos

Tiene un enlace <a href="#" id="link"> dentro de un div <div id="container">. Desea evitar que el enlace navegue y también impedir que el evento de clic active cualquier controlador en #container.

Repaso: control de eventos

¡Excelente trabajo! Ha aprendido a controlar el flujo de eventos:

  • .preventDefault(): detiene la acción predeterminada del navegador para un evento, como la navegación de un enlace o el envío de un formulario.
  • .stopPropagation(): evita que un evento se propague por el árbol del DOM hacia los elementos padres.

Estos métodos tan potentes le permiten controlar con precisión el comportamiento de los eventos en sus aplicaciones web, lo que da lugar a experiencias de usuario más predecibles y sólidas.

Gratis para empezar

Aprende JavaScript con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
22
Lecciones
48

Preguntas frecuentes

¿La lección «Detención de la propagación de eventos» es gratis?

Sí — el texto completo de «Detención de la propagación de eventos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de jQuery Academy, actualiza a CoddyKit PRO. El curso de jQuery Academy incluye 3 lecciones en total.

¿Qué aprenderé en «Detención de la propagación de eventos»?

Comprenda .stopPropagation() y .preventDefault() para controlar el flujo de eventos, impedir las acciones predeterminadas del navegador y gestionar eficazmente interacciones complejas entre eventos. Practicas jQuery Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar jQuery Academy?

No se requiere experiencia previa. jQuery Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 3.

¿Cuánto tiempo toma la lección «Detención de la propagación de eventos»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de jQuery Academy?

Sí. Cada lección de jQuery Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Implementación de delegación de eventos sólida
  2. Detención de la propagación de eventos
  3. Creación y activación de eventos personalizados
← Volver a jQuery Academy