Почему объект события отличается от jquery bind vs. 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);
});

Ответы

Ответ 1

Это потому, что jQuery использует собственную модель событий.

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.