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

时间:2010-05-19 06:04:20

标签: javascript events javascript-events jquery

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

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

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

VS

$(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 个答案:

答案 0 :(得分:24)

这是因为jQuery使用自己的Event model

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构造函数的幕后设置的。