event.preventDefault()与返回false(无jQuery)
我想知道是否event.preventDefault()
和return false
是相同的。
我做了一些测试,似乎是这样
例如,如果使用旧模型添加事件处理程序
elem.onclick = function(){
return false;
};
然后, return false
可防止默认操作,如event.preventDefault()
。
例如,如果使用addEventListener
添加事件处理程序
elem.addEventListener(
'click',
function(e){
return false;
},
false
);
然后, return false
不会阻止默认操作。
所有浏览器的行为如何?
event.preventDefault()
和return false
之间有更多的区别吗?
在某些情况下,我可以在哪里找到一些文档(我无法在MDN中) return false
行为像event.preventDefault()
?
我的问题只是关于纯javascript,而不是jQuery,所以请不要将它标记为event.preventDefault()与返回false的重复,即使两个问题的标题几乎相同。
1.3.1中的W3C文档对象模型事件规范。 事件注册接口声明EventListener中的handleEvent
没有返回值:
handleEvent
无论何时发生EventListener接口注册的类型的事件,都会调用此方法。 [...] 没有退货价值
在1.2.4下。 事件取消该文件还指出
取消通过调用Event的preventDefault方法来完成。 如果一个或多个EventListeners在事件流的任何阶段调用preventDefault,则默认操作将被取消。
这会阻止你使用任何返回true / false的效果可能在任何浏览器中使用并使用event.preventDefault()
。
更新
HTML5规范实际上指定了如何处理不同的返回值。 HTML规范的6.1.5.1节指出
如果返回值是WebIDL布尔值false值,则取消该事件。
除了“鼠标悬停”事件之外的所有内容。
结论
我仍然建议在大多数项目中使用event.preventDefault()
,因为您将与旧规范以及旧浏览器兼容。 只有当你只需要支持尖端的浏览器时,返回false来取消是可以的。
preventDefault,stopPropogation之间的区别,返回false
默认操作 - 控制事件引发时的服务器端操作。
假设我们有div控件,并且里面有一个按钮。 所以div是按钮的父控件。 我们有客户端点击和服务器端点击按钮事件。 此外,我们有客户端的点击事件的股利。
在客户端按钮的点击事件中,我们可以通过以下三种方式来控制父控制和服务器端代码的操作:
return false
- 这只允许控件的客户端事件。 父控件的服务器端事件和客户端事件不会被触发。
preventDefault()
- 这允许控件的客户端事件及其父控件。 服务器端事件即。 控件的默认操作未被触发。
stopPropogation()
- 这允许客户端以及控件的服务器端事件。 该控件的客户端事件不被允许。
return false
仅适用于IE,chrome,ff ...现代浏览器支持event.preventDefault()
上一篇: event.preventDefault() vs. return false (no jQuery)
下一篇: How to programmatically determine the current checked out Git branch