Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Preventing Child from firing parent's click event

Consider the following snippet:

<div class="div-outer">     Lorem ipsum dolor sit amet, consectetur adipiscing elit.     <div class="div-inner" style="background:red">         Curabitur hendrerit vehicula erat, ut gravida orci luctus vitae.     </div> </div> 

Now suppose the outer div has a live click associated with it. How do I make sure that the live click is not triggered when I click anywhere in the inner div?

Edit:

Here's the JS as requested

$(".div-outer").live("click",function(){alert("hi")});  

This should not be triggereed when clicking on ".inner-div"

like image 602
Mr Boss Avatar asked Dec 03 '12 11:12

Mr Boss


2 Answers

You have to add an event listener to the inner child and cancel the propagation of the event.

In plain JS something like

document.getElementById('inner').addEventListener('click',function (event){    event.stopPropagation(); }); 

is sufficient. Note that jQuery provides the same facility:

$(".inner-div").click(function(event){     event.stopPropagation(); });   

or

$(".inner-inner").on('click',function(event){     event.stopPropagation(); });   
like image 160
Zeta Avatar answered Sep 18 '22 09:09

Zeta


An alternative solution is to add a CSS Pointer Events rule to the child element:

CSS:

#childElement {     pointer-events: none; } 

JavaScript:

document.getElementById("childElement").style.pointerEvents = "none";

like image 31
Chunky Chunk Avatar answered Sep 19 '22 09:09

Chunky Chunk