在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游戏)?
答案 0 :(得分:2)
jQuery改变返回事件中的事件方法/数据。
使用event.originalEvent
,您可以将其恢复。
例如,jQuery为拖动的项目剥离dataTransfer
api,使用originalEvent
再次使用它。
docs:" jQuery规范化以下属性以实现跨浏览器一致性...要访问上面未列出的事件属性,请使用event.originalEvent对象"
在提议的案例中,它用于访问preventDefault
方法(停止默认操作),因为它不包含在jQuery事件中。
答案 1 :(得分:1)
请参阅jQuery 3.1.1中preventDefault
的定义:
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
就像使用preventDefault
和stopPropagation
一样。
答案 2 :(得分:0)
我用来了解事件是否实际上是通过物理鼠标点击触发的。这对于避免在提交表单上使用验证码非常有用。