event.preventDefault()与返回false(没有jQuery)

我想知道是否event.preventDefault()return false是相同的。

我做了一些testing ,似乎是这样

  • 例如,如果使用旧模型添加事件处理程序

     elem.onclick = function(){ return false; }; 

    然后, return false可以防止默认操作,如event.preventDefault()

  • 例如,如果使用addEventListener添加事件处理程序

     elem.addEventListener( 'click', function(e){ return false; }, false ); 

    然后, return false不会阻止默认的操作。

所有的浏览器都像这样吗?

event.preventDefault()之间有更多的差异,并return false

在哪里我可以find一些文件(我不能在MDN中) return false在某些情况下像event.preventDefault()一样行为?


我的问题只是关于普通的JavaScript,而不是jQuery,所以请不要将它标记为event.preventDefault()与返回false的重复,即使这两个问题具有几乎相同的标题。

1.3.1中的W3C文档对象模型事件规范 事件注册接口指出EventListener中的handleEvent没有返回值:

handleEvent当EventListener接口注册的types发生事件时调用此方法。 无返回值

1.2.4 事件取消该文件还指出

通过调用Event的preventDefault方法来完成取消。 如果一个或多个EventListener在事件stream的任何阶段调用preventDefault,则默认操作将被取消。

这会阻止你使用返回true / false的任何效果,并且可以在任何浏览器中使用event.preventDefault()

更新

HTML5规范实际上指定了如何处理不同的返回值。 HTML规范的6.1.5.1节指出

如果返回值是一个WebIDL布尔值,则取消该事件。

除了“鼠标hover”事件之外的所有内容。

结论

我仍然build议在大多数项目中使用event.preventDefault() ,因为您将兼容旧的规范,因此旧的浏览器。 只有当你只需要支持尖端的浏览器,返回false取消是可以的。

preventDefault,stopPropogation之间的区别,返回false

表显示差异

默认操作 – 控制事件引发时的服务器端操作。

假设我们有div控制,里面有一个button。 所以div是button的父控件。 我们有客户端点击和服务器端点击button事件。 此外,我们有客户端点击事件的分区。

在客户端button的点击事件中,我们可以通过以下三种方式来控制父控制和服务器端代码的操作:

  • return false – 这只允许控件的客户端事件。 父控件的服务器端事件和客户端事件不会被触发。

  • preventDefault() – 这允许控件的客户端事件及其父控件。 服务器端事件即。 控件的默认操作不会被触发。

  • stopPropogation() – 这允许客户端以及控件的服务器端事件。 该控件的客户端事件是不允许的。

return false只是为IE浏览器, event.preventDefault()是由铬,ff …现代浏览器支持