小编典典

event.preventDefault()与返回false(无jQuery)

javascript

我想知道是否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吗?

在哪里可以找到一些有关return false行为的文档(我在MDN中找不到)event.preventDefault()


阅读 271

收藏
2020-05-01

共1个答案

小编典典

W3C文档对象模型事件规范在 _1.3.1。 事件注册接口_指出,handleEventEventListener中没有返回值:

handleEvent 每当发生事件类型为注册了EventListener接口的事件时,都会调用此方法。[…] 没有返回值

根据 _1.2.4。 事件取消_文档还指出

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

这应该阻止您使用在任何浏览器中使用返回true / false可能产生的任何影响event.preventDefault()

更新资料

HTML5规范实际上指定了如何对待不同的返回值。HTML规范的7.1.5.1节规定:

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

除了“ mouseover”事件以外的所有事件。

结论

我仍然建议event.preventDefault()在大多数项目中使用,因为您将与旧规范兼容,从而与旧版浏览器兼容。仅当您只需要支持最新的浏览器时,返回false即可取消。

2020-05-01