2011-06-09 7 views
5

Para poner en orden mi jQuery, estoy buscando crear una clase "confirmar" para varios elementos con manejadores de eventos para poder disparar un cuadro de confirmación rápida para que el usuario pueda confirmar su acción.Prevenir un evento jQuery con otro

Si el usuario hace clic en Cancelar en el cuadro de confirmación, los siguientes eventos debe ser cancelada, pero esto debe no ser permanente, por ejemplo, que activa el evento debería volver a abrir la confirmación y empezar de nuevo. Si puedo solucionar esto, puedo hacer que cualquier acción delicada tenga una pregunta de confirmación para asegurarme de que el usuario haga clic.

Por ejemplo:

$('.confirm').click(function() { 
    if(!confirm('Are you sure?')) { 
     // Stop any other click events on $(this) from happening this instance. 
    } 
}); 

$('.clicker').click(function() { 
    alert('it happened'); 
}); 

<a class="clicker confirm">Click me</a> 

salida deseado sería que la cancelación de la confirmación de que cancelaría el evento click, pero no desactivar totalmente.

Respuesta

5

Puede utilizar event.stopImmediatePropagation() de jQuery:

$('.confirm').click(function(event) { 
    if(!confirm('Are you sure?')) { 
     event.stopImmediatePropagation(); 

     // Stop any other click events on $(this) from happening this instance. 
    } 
}); 

$('.clicker').click(function() { 
    alert('it happened'); 
}); 

Mira test case on jsFiddle

+0

¡Gracias! Esto es lo que pretendía hacer. Metió DOS VECES en mi respuesta, así que decidí eliminarlo;) gracias por refrescar mi mente! – mekwall

+0

Me gustaría agregar, en el caso de los formularios, event.preventDefault() también es necesario para evitar que el formulario se active cuando niega la confirmación. – Dunhamzzz

0
$('.confirm').click(function() {  
return confirm('Are you sure?'); 
}); 

también se puede utilizar event.stopPropagation() en el lado de tu evento de clic para detener la propagación furthure.

+1

encontré que return false no impidió que otros eventos de clic se dispare. – Dunhamzzz

+0

Lamentablemente, '.disablePropagation()' no existe. Fue mi mal, y debería ser '.stopPropagation()', que tampoco funciona. ¡Nicola presentó la solución correcta! – mekwall

+0

ohhh !!! mi error, pero '.stopPropagation()' debería funcionar – Vivek

Cuestiones relacionadas