I wondered if event.preventDefault()
and return false
were the same.
I have done some tests, and it seems that
-
If the event handler is added using old model, for example
elem.onclick = function(){ return false; };
Then,
return false
prevents default action, likeevent.preventDefault()
. -
If the event handler is added using
addEventListener
, for exampleelem.addEventListener( 'click', function(e){ return false; }, false );
Then,
return false
doesn't prevent the default action.
Do all browsers behave like this?
Are there more differences between event.preventDefault()
and return false
?
Where I can find some documentation (I couldn't in MDN) about return false
behaving like event.preventDefault()
in some cases?
My question is only about plain javascript, not jQuery, so please don't mark it as a duplicate of event.preventDefault() vs. return false, even if both questions have almost the same title.
Best Solution
The W3C Document Object Model Events Specification in 1.3.1. Event registration interfaces states that
handleEvent
in the EventListener has no return value:under 1.2.4. Event Cancelation the document also states that
which should discourage you from using any effect that returning true / false could have in any browser and use
event.preventDefault()
.Update
The HTML5 spec actually specifies how to treat a return value different. Section 7.1.5.1 of the HTML Spec states that
for everything but the "mouseover" event.
Conclusion
I would still recommend to use
event.preventDefault()
in most projects since you will be compatible with the old spec and thus older browsers. Only if you only need to support cutting edge browsers, returning false to cancel is okay.