首页 文章

event.preventDefault()与return false(没有jQuery)

提问于
浏览
76

我想知道 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

    1.3.1中的W3C Document Object Model Events Specification . 事件注册接口声明EventListener中的 handleEvent 没有返回值:

    handleEvent每当发生EventListener接口注册类型的事件时,都会调用此方法 . [...]没有回报 Value

    根据1.2.4 . 事件取消该文件还说明了这一点

    取消是通过调用Event的preventDefault方法完成的 . 如果一个或多个EventListeners在事件流的任何阶段调用preventDefault,则将取消默认操作 .

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

    Update

    HTML5规范实际上指定了如何处理不同的返回值 . Section 7.1.5.1 of the HTML Spec说明

    如果返回值是WebIDL布尔值false,则取消该事件 .

    除了“鼠标悬停”事件之外的一切 .

    Conclusion

    我仍然建议在大多数项目中使用 event.preventDefault() ,因为您将与旧规范和旧版浏览器兼容 . 只有当您只需要支持最先进的浏览器时,返回false才能取消是可以的 .

  • -12

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

    Table Showing Difference

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

    假设我们有div控制,在里面我们有一个按钮 . 所以div是按钮的父控件 . 我们有按钮的客户 endpoints 击和服务器 endpoints 击事件 . 我们还有div的客户 endpoints 击事件 .

    在客户端按钮的单击事件上,我们可以使用以下三种方式控制父控件和服务器端代码的操作:

    • return false - 这仅允许控件的客户端事件 . 不会触发父控件的服务器端事件和客户端事件 .

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

    • stopPropogation() - 这允许客户端以及控件的服务器端事件 . 不允许控件的客户端事件 .

  • 50

    return false 仅适用于IE, event.preventDefault() 受chrome,ff ...现代浏览器支持

相关问题