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()

    链接地址: http://www.djcxy.com/p/3289.html

    上一篇: event.preventDefault() vs. return false (no jQuery)

    下一篇: How to programmatically determine the current checked out Git branch