JQuery - event.originalEvent.preventDefault()有什么用?

时间:2017-01-01 03:56:50

标签: javascript jquery

a book中,处理mouseDown事件的代码如下:

mousedownhandler: function (ev) {
    mouse.down = true;
    mouse.downX = mouse.x;
    mouse.downY = mouse.y;
    ev.originalEvent.preventDefault();
}

所以我的问题是为什么在这种情况下使用ev.originalEvent.preventDefault();而不是ev.preventDefault();return false;(HTML5游戏)?

3 个答案:

答案 0 :(得分:2)

jQuery改变返回事件中的事件方法/数据。

使用event.originalEvent,您可以将其恢复。

例如,jQuery为拖动的项目剥离dataTransfer api,使用originalEvent再次使用它。

  
    

docs:" jQuery规范化以下属性以实现跨浏览器一致性...要访问上面未列出的事件属性,请使用event.originalEvent对象"

  

在提议的案例中,它用于访问preventDefault方法(停止默认操作),因为它不包含在jQuery事件中。

答案 1 :(得分:1)

请参阅jQuery 3.1.1preventDefault的定义:

jQuery.Event.prototype = {
    // ...
    preventDefault: function() {
        var e = this.originalEvent;
        this.isDefaultPrevented = returnTrue;
        if ( e && !this.isSimulated ) {
            e.preventDefault();
        }
    },
    // ...
};

所以基本上它只会调用本机preventDefault。如果你使用的是jQuery,我会使用它的方法,它也会更新isDefaultPrevented,如果你想检查它可能会很有用(但你也可以使用原生的.originalEvent.defaultPrevented)。

如果您不关心isDefaultPrevented并且知道jQuery尚未模拟事件,则调用本机preventDefault可能会快几毫秒。这是我能想到的唯一潜在优势,但这肯定不会成为瓶颈。

在jQuery事件监听器中返回false就像使用preventDefaultstopPropagation一样。

答案 2 :(得分:0)

我用来了解事件是否实际上是通过物理鼠标点击触发的。这对于避免在提交表单上使用验证码非常有用。