Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

115
Vistas
El clic activa el detector de eventos que crea

En el siguiente ejemplo, ¿por qué un solo clic en el botón no solo activa el detector de eventos que se agrega al botón, sino también el detector de eventos que se agrega al cuerpo? En otras palabras: ¿Por qué el color cambia a rojo en lugar de verde? ¿Y cómo previenes esto?

 $("button").on("click", function() { // Change Color $("body").css({ "background-color": "#3FE1B0" }); // Add New Event Listener... $("body").on("click", function() { // ...Which Also Changes Color $(this).css({ "background-color": "#FF4F5E" }); }); });
 /* Design Changes */ body { height: 100vh; margin: 0; display: flex; justify-content: center; align-items: center; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.min.js"></script> <button>Click Me!</button>

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Tu problema es la propagación de eventos . Lo que sucede cuando el usuario hace clic en el botón con su código original es:

  • el controlador de eventos se activa y cambia el color de fondo al que especifique (#3FE1B0)
  • el controlador de eventos también se agrega al cuerpo para cambiar el color a #FF4F5E
  • el evento se propaga hasta sus elementos principales, incluido, al final de la cadena, el cuerpo
  • por lo que se ejecuta el controlador de eventos en el cuerpo (el hecho de que se acaba de agregar no hace ninguna diferencia), por lo que el color cambia al que aún no desea

La solución es simple: use el método stopPropagation del evento para evitar que se propague hacia arriba:

 $("button").on("click", function(event) { // Change Color $("body").css({ "background-color": "#3FE1B0" }); // Add New Event Listener... $("body").on("click", function() { // ...Which Also Changes Color $(this).css({ "background-color": "#FF4F5E" }); }); event.stopPropagation(); });
 /* Design Changes */ body { height: 100vh; margin: 0; display: flex; justify-content: center; align-items: center; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.min.js"></script> <button>Click Me!</button>

about 4 years ago · Juan Pablo Isaza Denunciar

0

Una fuente del problema es que al hacer clic en el <button> dentro del <body> activa el evento de clic tanto para el elemento <body> como para el elemento <button> . Debe usar event.stopPropagation() para evitar que el evento burbujee en el árbol DOM.

 $("button").on("click", function(e) { $("body").css({ "background-color": "#3FE1B0" }); e.stopPropagation(); }); $("body").on("click", function(e) { $("body").css({ "background-color": "#FF4F5E" }); });
 body { height: 100vh; margin: 0; display: flex; justify-content: center; align-items: center; }
 <!DOCTYPE html> <html> <head> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <title>Page Title</title> </head> <body> <button>Click Me!</button> </body> </html>

about 4 years ago · Juan Pablo Isaza Denunciar

0

Primero, debe reorganizar su código.

En segundo lugar, use stopPropagation para evitar que se activen ambos controladores de clics.

Pruebe el siguiente ejemplo:

 $("body").on("click", function(e) { $(this).css({ "background-color": "#FF4F5E" }); }); $("button").on("click", function(e) { e.stopPropagation() $("body").css({ "background-color": "#3FE1B0" }); });
 /* Design Changes */ body { height: 100vh; margin: 0; display: flex; justify-content: center; align-items: center; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.min.js"></script> <button>Click Me!</button>

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda