No onclick when child is clicked
Use event.stopPropagation()
on the child element.
$(".attachment").on("click", function(event){
event.stopPropagation();
console.log( "I was clicked, but my parent will not be." );
});
This prevents the event from bubbling up the DOM to the parent node.
Also part of the event
object is the target
member. This will tell you which element triggered the event to begin with. However, in this instance, stopPropagation
appears to be the best solution.
$(".outerElement").on("click", function(event){
console.log( event.target );
});
I'm not sure what the performance implications of allowing the propagation from the child elements, but I solved this by comparing event.target and event.currentTarget:
onClick={(event) => {
if (event.target === event.currentTarget) {
console.log('Handle click');
}
}}
This is React ^ More generalized javascript code would be:
$('.outerElement').click(function(event) {
if (event.currentTarget !== event.target) {
return;
}
// Handle event
});
You can also filter out specific element types like so:
$('.outerElement').click(function(event) {
if (['input', 'select', 'option'].indexOf(event.target.localName) >= 0) {
return;
}
// Handle event
});