event.preventDefault()vs. return false(no jQuery) [英] event.preventDefault() vs. return false (no jQuery)

查看:114
本文介绍了event.preventDefault()vs. return false(no 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()返回false 之间是否有更多的区别?



在哪里可以找到关于的一些文档(我不能在MDN中)return false 的行为就像 event.preventDefault )在某些情况下






我的问题只是简单的javascript,而不是jQuery,所以请不要将其标记为 event.preventDefault()vs. return false ,即使两个问题都有相同的标题。

W3C文档对象模型事件规范。事件注册界面指出,EventListener中的 handleEvent 没有返回值:


handleEvent
每当发生EventBener接口注册的
类型的事件时,将调用此方法。 [...] 否返回


事件取消该文件还指出,


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


这应该阻止您使用任何返回true / false的效果可能会在任何浏览器中使用,并使用 event.preventDefault()



更新



HTML5规范实际上指定了如何处理不同的返回值。 HTML规范第6.1.5.1节说明


如果返回值为WebIDL布尔值,则取消
事件。


除了mouseover事件之外的所有内容。



结论



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


I wondered if event.preventDefault() and return false were the same.

I have done some tests, and it seems that

  • If the event handler is added using old model, for example

    elem.onclick = function(){
        return false;
    };
    

    Then, return false prevents default action, like event.preventDefault().

  • If the event handler is added using addEventListener, for example

    elem.addEventListener(
        'click',
        function(e){
            return false;
        },
        false
    );
    

    Then, return false doesn't prevent the default action.

Do all browsers behave like this?

Are there more differences between event.preventDefault() and return false?

Where I can find some documentation (I couldn't in MDN) about return false behaving like event.preventDefault() in some cases?


My question is only about plain javascript, not jQuery, so please don't mark it as a duplicate of event.preventDefault() vs. return false, even if both questions have almost the same title.

解决方案

The W3C Document Object Model Events Specification in 1.3.1. Event registration interfaces states that handleEvent in the EventListener has no return value:

handleEvent This method is called whenever an event occurs of the type for which the EventListener interface was registered. [...] No Return Value

under 1.2.4. Event Cancelation the document also states that

Cancelation is accomplished by calling the Event's preventDefault method. If one or more EventListeners call preventDefault during any phase of event flow the default action will be canceled.

which should discourage you from using any effect that returning true / false could have in any browser and use event.preventDefault().

Update

The HTML5 spec actually specifies how to treat a return value different. Section 6.1.5.1 of the HTML Spec states that

If return value is a WebIDL boolean false value, then cancel the event.

for everything but the "mouseover" event.

Conclusion

I would still recommend to use event.preventDefault() in most projects since you will be compatible with the old spec and thus older browsers. Only if you only need to support cutting edge browsers, returning false to cancel is okay.

这篇关于event.preventDefault()vs. return false(no jQuery)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆