I'm writing a little jQuery extension that prevents a user from double clicking on a link.
$.fn.preventDoubleClick = function() { return this.click(function() { var $t = $(this) , retVal = $t.data('active') // check the internal flag ; if (retVal || retVal === undefined) { // if ON... $t.data('active', false); // set the internal flag to OFF setTimeout(function() { $t.data('active', true); }, 1000); // after 1 second, set the internal flag to ON console.log("allowed"); return true; } else { // if OFF... console.log("blocked"); return false; } }); };
the problem is that if there are other click event handlers on the elements, they still fire:
$('#myLink').click(function() { console.log("Clicked"); }); $('#myLink').preventDoubleClick();
And now when you double click the link, I get this in my log:
allowed
clicked
blocked
clicked
So basically, I need the click function inside preventDoubleClick
to stop all the other event handlers from firing. How can I do this?
To stop an event from further propagation in the capturing and bubbling phases, you call the Event. stopPropation() method in the event handler. Note that the event. stopPropagation() method doesn't stop any default behaviors of the element e.g., link click, checkbox checked.
stopPropagation() method stops the bubbling of an event to parent elements, preventing any parent event handlers from being executed.
You can add many event handlers to one element. You can add many event handlers of the same type to one element, i.e two "click" events. You can add event listeners to any DOM object not only HTML elements. i.e the window object.
Thanks to Adam's link, I was able to see the function I needed: stopImmediatePropagation()
.
I believe you're looking for event.stopPropagation
EDIT: turns out this was not the correct option for Nick's purposes. Please see his answer.
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