Comment arrêter de remontée d'événements sur la case à cocher, cliquez
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:
JS:
$(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
});
});
CSS:
#container.hidden #body {
display: none;
}
HTML:
<script type="text/javascript" src="http://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>
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.
À la fois de l'arrêt suivant à la remontée d'événements, mais aussi de ne pas modifier la case à cocher état:
event.preventDefault();
return false;
- J'ai trouvé un article sur ce sujet qui pourrait être utile à d'autres Pile Overflowers. Astuce: Cliquez sur la Rangée de Table pour Déclencher une Case à cocher et Cliquez sur
Vous devez vous connecter pour publier un commentaire.
remplacer
avec
événement.stopPropagation()
événement.preventDefault()
.live()
méthode, puis cela ne fonctionnera pas. Vous devrez utiliserreturn false;
lui-même..on()
méthode (live est maintenant obsolète). Je ne pouvais pas comprendre pourquoi return false ne fonctionnait pas.Utiliser la méthode stopPropagation:
N'oubliez pas c'est à dire:
Comme d'autres l'ont mentionné, essayez
stopPropagation()
.Et il y a un deuxième gestionnaire d'essayer:
event.cancelBubble = true;
C'est un IE gestionnaire spécifique, mais il est pris en charge dans au moins FF. Ne connais pas vraiment sur le sujet, car je n'ai pas utilisé moi-même, mais il pourrait être intéressant d'un coup, si tout le reste échoue.C'est un excellent exemple pour comprendre remontée d'événements concept. Basé sur les réponses ci-dessus, le code final ressemblera comme mentionné ci-dessous. Lorsque l'utilisateur Clique sur la case de la propagation de l'évènement de son élément parent 'header' sera arrêté à l'aide de
event.stopPropagation();
.Lors de l'utilisation de jQuery, vous n'avez pas besoin d'appeler une fonction d'arrêt séparé.
Vous pouvez simplement retourner
false
dans le gestionnaire d'événementsCela permettra d'arrêter l'épreuve en cours et annuler le bouillonnement..
Voir aussi de l'événement.preventDefault() vs return false
De l'jQuery docs:
De crédit à @mehras pour le code. Je viens de créer un extrait de le démontrer parce que je pensais que ce serait apprécié et je voulais une excuse pour essayer de la fonctionnalité.
JS:
CSS:
HTML:
Dans angularjs cela devrait fonctionner: