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

yod*_*een 15 javascript jquery events javascript-events

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

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

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

$(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);
});
Run Code Online (Sandbox Code Playgroud)

CMS*_*CMS 24

那是因为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);
    });
});
Run Code Online (Sandbox Code Playgroud)

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