2016-04-26 7 views
0

Ich habe 2 divs mit einem js click-Ereignis. Ein Div befindet sich in dem anderen.Wie Click-Ereignis von äußeren div zu verhindern, wenn inner div geklickt wird

Aber ich möchte nicht das Click-Ereignis der äußeren Div ausgelöst werden, wenn ich den inneren klicke. Wie kann ich das verhindern?

+0

Mögliche Duplikat [Prevent Durchführung von Elternereignishandler] (http://stackoverflow.com/questions/139858 2/prevent-execution-von-parent-event-handler) –

Antwort

0

Verwenden Sie event.stopPropagation();

Gefällt Ihnen dieses

document.getElementById("#seconddiv").addEventListener("click", function($event){ 
    $event.stopPropagation(); 
}); 
+0

thx :) aber nach einigem forschen habe ich einen besseren weg gefunden, das click-event des inneren divs direkt aufzurufen, ohne das äußere zu aktivieren. Es sieht aus wie '$ ('. Class1'). Add ('. Class2'). Click (some_function);' Das Problem ist jetzt, dass ich das click -Ereignis für das Dokument aufrufen muss, weil mein div nicht existiert, wenn mein Js Code wird gelesen. '$ (document) .on ('click', '.class2', function (e) {});' Wie kann ich '$ ('. class1') nennen. add ('. class2'). click (some_function); 'auf dem Dokument? – dunnohowishouldnamemyself

+0

gut für dich :) –

0

Verwendung event.stopPropagation:

document.getElementById('inner').addEventListener('click', function (event){ 
    event.stopPropagation(); 
    console.log ('Inner div clicked!'); 
}); 

https://jsfiddle.net/4L87qLte/

0

standardmäßig Veranstaltung beginnt auf der untersten Ebene des DOM Umgang mit dem Sie haben einen Handler definiert Behandeln Sie das Zielereignis. Angenommen, Sie Ereignis-Listener höher in der Elternkette definiert haben das gleiche Ereignis zu behandeln, werden Sie zu stop the propagation of the event benötigen, wenn Sie über die Schicht behandelt nicht für die Veranstaltung werden wollen Sie beabsichtigen, es in gehandhabt werden:

e.stopPropagation(); 

sehen Sie, was passiert, wenn Sie diese Zeile im folgenden Beispiel entfernen:

document.querySelector('.inner').addEventListener('click', function(e) { 
 
    alert('inner div clicked!'); 
 
    e.stopPropagation(); 
 
}); 
 

 
document.querySelector('.outer').addEventListener('click', function() { 
 
    alert('outer div clicked!'); 
 
});
.outer { 
 
    width: 200px; 
 
    height: 200px; 
 
    background: blue; 
 
} 
 

 
.inner { 
 
    width: 100px; 
 
    height: 100px; 
 
    background: green; 
 
}
<div class='outer'> 
 
    Outer 
 
    <div class='inner'> 
 
    Inner 
 
    </div> 
 
</div>