214 votes

Comment arrêter l'événement bouillonnant en cliquant sur la case à cocher

J'ai une case à cocher que je veux effectuer certaines Ajax d'action sur l'événement click, cependant la case à cocher est également à l'intérieur d'un conteneur avec sa propre sur le comportement que je ne veux pas exécuter lorsque la case est cliqué. Cet exemple illustre ce que je veux faire:

<html lang="en">
    <head>
    	<title>Test</title>
    	<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    	<script type="text/javascript">
    	$(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
    		});
    	});
    	</script>
    	<style type="text/css">
    	#container.hidden #body {
    		display:none;
    	}
    	</style>
    </head>
    <body>
    	<div id="container">
    		<div id="header">
    			<h1>Title</h1>
    			<input type="checkbox" name="test" />
    		</div>
    		<div id="body">
    			<p>Some content</p>
    		</div>
    	</div>
    </body>
</html>

Cependant, je ne peux pas comprendre comment arrêter la remontée d'événements sans causer le comportement par défaut, cliquez sur (case à cocher devenir cochée/non cochée) pour ne pas s'exécuter.

Les deux suivantes arrêter la remontée d'événements, mais aussi de ne pas modifier la case à cocher état:

event.preventDefault();
return false;

384voto

rahul Points 84185

remplacer

event.preventDefault();
return false;

avec

event.stopPropagation();

de l'événement.stopPropagation()

Arrête le bouillonnement d'un événement à les éléments de parent, de la prévention de tout parent les gestionnaires de notification de la de l'événement.

de l'événement.preventDefault()

Empêche le navigateur de l'exécution de l'action par défaut. L'utilisation de la méthode isDefaultPrevented de savoir si cette méthode a jamais été appelé (sur ce objet de l'événement).

34voto

Patrice Neff Points 766

Utilisez la méthode stopPropagation:

 event.stopPropagation();
 

30voto

Faraz Points 1480

N'oubliez pas IE:

 if (event.stopPropagation) { // W3C/addEventListener()
        event.stopPropagation();
    } else { // Older IE.
        event.cancelBubble = true;
}
 

6voto

peirix Points 10728

Comme d'autres l'ont mentionné, essayez stopPropagation() .

Et il y a un deuxième gestionnaire à essayer: event.cancelBubble = true; C'est un gestionnaire spécifique à IE, mais il est pris en charge dans au moins FF. Je n'en sais vraiment rien, car je ne l'ai pas utilisé moi-même, mais cela pourrait valoir le coup, si tout le reste échoue.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X