为什么事件对象不同来自jquery bind和addEventListener

为什么当我使用jQuery绑定我返回的事件对象时,我使用addEventListener返回的事件对象不同?

此jQuery绑定产生的事件对象没有targetTouches数组(除其他外),但addEventListener中的事件没有。 是我还是不对的?

$(document).ready (function () { $("#test").bind("touchmove", function (event) { console.log(event.targetTouches[0].pageX); // targetTouches is undefined }); }); 

 $(document).ready (function () { var foo = document.querySelectorAll('#test') foo[0].addEventListener('touchmove', function (event) { console.log(event.targetTouches[0].pageX); // returns the correct values }, false); }); 

那是因为jQuery使用自己的Event模型 。

jQuery只是简单地将原始事件中的一些属性复制并规​​范化为您作为处理程序的第一个参数获得的事件对象。

复制的属性基于DOM Level 3 Events Spec 。

要获取原始事件对象,您可以:

 $(document).ready (function () { $("#test").bind("touchmove", function (event) { var e = event.originalEvent; console.log(e.targetTouches[0].pageX); }); }); 

originalEvent属性是可访问的,它可以工作,但没有记录,你可以看到它是如何在jQuery.Event构造函数的幕后设置的。