Saturday, 31 December 2016

javascript - How do I prevent a parent's onclick event from firing when a child anchor is clicked?




I'm currently using jQuery to make a div clickable and in this div I also have anchors. The problem I'm running into is that when I click on an anchor both click events are firing (for the div and the anchor). How do I prevent the div's onclick event from firing when an anchor is clicked?



Here's the broken code:



JavaScript



var url = $("#clickable a").attr("href");

$("#clickable").click(function() {
window.location = url;

return true;
})


HTML






Answer



Events bubble to the highest point in the DOM at which a click event has been attached. So in your example, even if you didn't have any other explicitly clickable elements in the div, every child element of the div would bubble their click event up the DOM to until the DIV's click event handler catches it.



There are two solutions to this is to check to see who actually originated the event. jQuery passes an eventargs object along with the event:



$("#clickable").click(function(e) {
var senderElement = e.target;
// Check if sender is the
element e.g.
// if($(e.target).is("div")) {

window.location = url;
return true;
});


You can also attach a click event handler to your links which tell them to stop event bubbling after their own handler executes:



$("#clickable a").click(function(e) {
// Do something
e.stopPropagation();

});

No comments:

Post a Comment

c++ - Does curly brackets matter for empty constructor?

Those brackets declare an empty, inline constructor. In that case, with them, the constructor does exist, it merely does nothing more than t...