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