I can't seem to get this to stop propagating..
$(document).ready(function(){
$("body").on("click","img.theater",function(event){
event.stopPropagation();
$('.theater-wrapper').show();
});
// This shouldn't fire if I click inside of the div that's inside of the
// `.theater-wrapper`, which is called `.theater-container`, anything else it should.
$(".theater-wrapper").click(function(event){
$('.theater-wrapper').hide();
});
});
Refer this jsfiddle
The event. stopPropagation() method stops the bubbling of an event to parent elements, preventing any parent event handlers from being executed. Tip: Use the event. isPropagationStopped() method to check whether this method was called for the event.
stopPropagation() Event Method The stopPropagation() method prevents propagation of the same event from being called. Propagation means bubbling up to parent elements or capturing down to child elements.
stopPropagation prevents further propagation of the current event in the capturing and bubbling phases. preventDefault prevents the default action the browser makes on that event.
Description: Prevents the event from bubbling up the DOM tree, preventing any parent handlers from being notified of the event.
Since you are using on
on the body
element and not directly on img.theater
the event is going to bubble up to body
element and that is how it works.
In the course of event bubbling .theater-wrapper
elements click
event will be triggered so you are seeing it.
If you are not creating any dynamic elements then attach the click event handler directly on img.theater
element.
$("img.theater").click(function(event){
event.stopPropagation();
$('.theater-wrapper').show();
});
Alternatively you can check the target of the click
event inside .theater-wrapper
elements click
handler and do nothing.
$(".theater-wrapper").click(function(event){
if ($(event.target).is('img.theater')){
event.stopPropagation();
return;
}
$('.theater-wrapper').hide();
});
The best way to do that is :
$(".theater-wrapper").click(function(event){
if (!$(event.target).is('img.theater')){
$('.theater-wrapper').hide();
}
});
It's working for me with an accordion and checkbox
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With