How to have click event ONLY fire on parent DIV, not children?
I have a DIV with a classed foobar
, and a few DIVs inside that DIV that are unclassed, but I suppose they are inheriting the foobar
class:
$('.foobar').on('click', function() { /*...do stuff...*/ });
I want that to fire off only when clicking somewhere in the DIV but not on its children DIVs.
If the e.target
is the same element as this
, you've not clicked on a descendant.
$('.foobar').on('click', function(e) {
if (e.target !== this)
return;
alert( 'clicked the foobar' );
});
.foobar {
padding: 20px; background: yellow;
}
span {
background: blue; color: white; padding: 8px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class='foobar'> .foobar (alert)
<span>child (no alert)</span>
</div>
There's another way that works if you don't mind only targeting newer browsers. Just add the CSS
pointer-events: none;
to any children of the div you want to capture the click. Here's the support tables
http://caniuse.com/#feat=pointer-events
I did not get the accepted answer to work, but this seems to do the trick, at least in vanilla JS.
if(e.target !== e.currentTarget) return;
You can use bubbling in your favor:
$('.foobar').on('click', function(e) {
// do your thing.
}).on('click', 'div', function(e) {
// clicked on descendant div
e.stopPropagation();
});