Untergeordnetes Element-Klickereignis löst das übergeordnete Klickereignis aus


71

Angenommen, Sie haben einen Code wie diesen:

<html>
<head>
</head>
<body>
   <div id="parentDiv" onclick="alert('parentDiv');">
       <div id="childDiv" onclick="alert('childDiv');">
       </div>   
    </div>
</body>
</html>​

Ich möchte das parentDivKlickereignis nicht auslösen , wenn ich auf " childDivWie kann ich das tun?" Klicke.

Aktualisiert

Wie ist auch die Ausführungsreihenfolge dieser beiden Ereignisse?


3
Dies wird als Ereignisblasen bezeichnet. Ein guter Ausgangspunkt: - stackoverflow.com/questions/4616694/…
Pranav

2
Der Titel dieser Frage sollte "Untergeordnetes Ereignisklick vom übergeordneten übergeordneten Klickereignis stoppen" lauten. Es lautet wie das Gegenteil.
Iwnnay

Antworten:


92

Sie müssen event.stopPropagation () verwenden

Live-Demo

$('#childDiv').click(function(event){
    event.stopPropagation();
    alert(event.target.id);
});​

event.stopPropagation ()

Beschreibung: Verhindert, dass das Ereignis in den DOM-Baum sprudelt, und verhindert, dass übergeordnete Handler über das Ereignis benachrichtigt werden.


6
Wenn Sie zwei separate Handler für das übergeordnete und das untergeordnete Klickereignis haben und nur den untergeordneten Handler durch Klickereignis für das untergeordnete Ereignis auslösen möchten, müssen Sie event.stopPropagation () für childDiv und nicht für parentDiv
tsveti_iko aufrufen

20

Ohne jQuery: DEMO

 <div id="parentDiv" onclick="alert('parentDiv');">
   <div id="childDiv" onclick="alert('childDiv');event.cancelBubble=true;">
     AAA
   </div>   
</div>

Danke @Akhil Es funktioniert für mich.
Amol Rajput

8

Ich stand vor dem gleichen Problem und löste es mit dieser Methode. 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");
}

6

Die stopPropagation()Methode stoppt das Sprudeln eines Ereignisses zu übergeordneten Elementen und verhindert, dass übergeordnete Handler über das Ereignis benachrichtigt werden.

Mit der Methode können Sie feststellen event.isPropagationStopped(), ob diese Methode jemals aufgerufen wurde (für dieses Ereignisobjekt).

Syntax:

Hier ist die einfache Syntax zur Verwendung dieser Methode:

event.stopPropagation() 

Beispiel:

$("div").click(function(event) {
    alert("This is : " + $(this).prop('id'));

    // Comment the following to see the difference
    event.stopPropagation();
});​

5

Klickereignis Blasen , was nun mit Sprudeln gemeint ist, ist hier ein guter Ausgangspunkt . Sie können verwenden event.stopPropagation(), wenn Sie nicht möchten, dass sich dieses Ereignis weiter ausbreitet.

Auch ein guter Link, um auf MDN zu verweisen

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.