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 …现代浏览器支持