Почему объект события отличается от jquery bind и addEventListener - PullRequest
15 голосов
/ 19 мая 2010

Почему при использовании jQuery bind объект события, который я получаю, отличается от объекта события, который я получаю с помощью addEventListener?

Объект события, полученный в результате этого jQuery bind, не имеет массива 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 Ответ

24 голосов
/ 19 мая 2010

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

jQuery просто копирует и нормализует некоторые свойства из исходного события в объект события, который вы получаете в качестве первого аргумента обработчика.

Скопированные свойства основаны на спецификации событий уровня * DOM уровня 3 1010 *.

Чтобы получить исходный объект события, вы можете:

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

Свойство originalEvent доступно, и оно будет работать, но не задокументировано, вы можете увидеть, как оно скрыто, в конструкторе jQuery.Event.

...