Cómo detener la propagación de eventos al hacer clic en la casilla de verificación

Resuelto roryf asked hace 15 años • 10 respuestas

Tengo una casilla de verificación en la que quiero realizar alguna acción Ajax en el evento de clic, sin embargo, la casilla de verificación también está dentro de un contenedor con su propio comportamiento de clic que no quiero ejecutar cuando se hace clic en la casilla de verificación. Este ejemplo ilustra lo que quiero hacer:

$(document).ready(function() {
  $('#container').addClass('hidden');
  $('#header').click(function() {
    if ($('#container').hasClass('hidden')) {
      $('#container').removeClass('hidden');
    } else {
      $('#container').addClass('hidden');
    }
  });
  $('#header input[type=checkbox]').click(function(event) {
    // Do something
  });
});
#container.hidden #body {
  display: none;
}
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<div id="container">
  <div id="header">
    <h1>Title</h1>
    <input type="checkbox" name="test" />
  </div>
  <div id="body">
    <p>Some content</p>
  </div>
</div>
Expandir fragmento

Sin embargo, no puedo encontrar la manera de detener la propagación del evento sin provocar que no se ejecute el comportamiento de clic predeterminado (la casilla de verificación se marca/desmarca).

Las dos opciones siguientes detienen la propagación del evento, pero tampoco cambian el estado de la casilla de verificación:

event.preventDefault();
return false;
roryf avatar Jul 22 '09 16:07 roryf
Aceptado

reemplazar

event.preventDefault();
return false;

con

event.stopPropagation();

evento.stopPropagation()

Detiene la difusión de un evento a los elementos principales, evitando que los controladores principales sean notificados del evento.

evento.preventDefault()

Impide que el navegador ejecute la acción predeterminada. Utilice el método isDefaultPrevented para saber si alguna vez se llamó a este método (en ese objeto de evento).

rahul avatar Jul 22 '2009 10:07 rahul

Utilice el método stopPropagation:

event.stopPropagation();
Patrice Neff avatar Jul 22 '2009 10:07 Patrice Neff