我想知道 event.preventDefault()
和 return false
是否相同 .
我做了some tests,似乎
- 例如,如果使用旧模型添加事件处理程序
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() vs. return false的副本,即使两个问题的 Headers 几乎相同 .
3 回答
1.3.1中的W3C Document Object Model Events Specification . 事件注册接口声明EventListener中的
handleEvent
没有返回值:根据1.2.4 . 事件取消该文件还说明了这一点
这应该阻止你使用任何返回true / false的效果在任何浏览器中都可以使用
event.preventDefault()
.Update
HTML5规范实际上指定了如何处理不同的返回值 . Section 7.1.5.1 of the HTML Spec说明
除了“鼠标悬停”事件之外的一切 .
Conclusion
我仍然建议在大多数项目中使用
event.preventDefault()
,因为您将与旧规范和旧版浏览器兼容 . 只有当您只需要支持最先进的浏览器时,返回false才能取消是可以的 .preventDefault,stopPropogation之间的区别,返回false
默认操作 - 控制事件引发时的服务器端操作 .
假设我们有div控制,在里面我们有一个按钮 . 所以div是按钮的父控件 . 我们有按钮的客户 endpoints 击和服务器 endpoints 击事件 . 我们还有div的客户 endpoints 击事件 .
在客户端按钮的单击事件上,我们可以使用以下三种方式控制父控件和服务器端代码的操作:
return false
- 这仅允许控件的客户端事件 . 不会触发父控件的服务器端事件和客户端事件 .preventDefault()
- 这允许客户端控制事件及其父控件 . 服务器端事件即 . 不会触发控件的默认操作 .stopPropogation()
- 这允许客户端以及控件的服务器端事件 . 不允许控件的客户端事件 .return false
仅适用于IE,event.preventDefault()
受chrome,ff ...现代浏览器支持