Disons que vous avez un code comme celui-ci:
<html>
<head>
</head>
<body>
<div id="parentDiv" onclick="alert('parentDiv');">
<div id="childDiv" onclick="alert('childDiv');">
</div>
</div>
</body>
</html>
Je ne veux pas déclencher l'événement parentDiv
click lorsque je clique sur childDiv
, comment puis-je faire cela?
Mise à jour
Aussi, quelle est la séquence d'exécution de ces deux événements?
Vous devez utiliser event.stopPropagation ()
$('#childDiv').click(function(event){
event.stopPropagation();
alert(event.target.id);
});
Description: empêche l’événement de remonter dans l’arborescence DOM, empêchant ainsi les gestionnaires parents d’être avertis de l’événement.
Sans jQuery: DÉMO
<div id="parentDiv" onclick="alert('parentDiv');">
<div id="childDiv" onclick="alert('childDiv');event.cancelBubble=true;">
AAA
</div>
</div>
J'ai fait face au même problème et le résous par cette méthode. html:
<div id="parentDiv">
<div id="childDiv">
AAA
</div>
BBBB
</div>
JS:
$(document).ready(function(){
$("#parentDiv").click(function(e){
if(e.target.id=="childDiv"){
childEvent();
} else {
parentEvent();
}
});
});
function childEvent(){
alert("child event");
}
function parentEvent(){
alert("paren event");
}
La méthode stopPropagation()
arrête la propagation d'un événement dans les éléments parents, empêchant ainsi les gestionnaires parents d'être avertis de l'événement.
Vous pouvez utiliser la méthode event.isPropagationStopped()
pour savoir si cette méthode a déjà été appelée (sur cet événement).
Syntaxe:
Voici la syntaxe simple pour utiliser cette méthode:
event.stopPropagation()
Exemple:
$("div").click(function(event) {
alert("This is : " + $(this).prop('id'));
// Comment the following to see the difference
event.stopPropagation();
});