2010-05-19 34 views
15

Tại sao khi tôi sử dụng jQuery ràng buộc đối tượng sự kiện mà tôi nhận được thì khác với đối tượng sự kiện mà tôi lấy lại bằng cách sử dụng addEventListener?Tại sao đối tượng sự kiện khác với jquery bind so với addEventListener

Đối tượng sự kiện xuất phát từ liên kết jQuery này không có mảng targetTouches (trong số những thứ khác) nhưng sự kiện từ addEventListener thực hiện. Có phải tôi hay là cái gì đó không đúng ở đây?

$(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); 
}); 
+0

Bạn có thể đăng mã liên quan đến việc tạo biến targetTouches không? – ground5hark

+0

@bobthabuilda: 'targetTouches' là thuộc tính của sự kiện' touch' có sẵn nếu tôi nhớ chính xác, chỉ trên Safari/WebKit (thực sự phổ biến trên ứng dụng iPhone). – CMS

Trả lời

24

Đó là bởi vì jQuery sử dụng riêng Event model của nó.

jQuery chỉ cần sao chép và bình thường hóa một số thuộc tính từ sự kiện ban đầu, đến đối tượng sự kiện mà bạn nhận được làm đối số đầu tiên của trình xử lý.

Thuộc tính được sao chép dựa trên DOM Level 3 Events Spec.

Để có được đối tượng sự kiện ban đầu, bạn có thể:

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

Thuộc tính originalEvent có thể truy cập và nó sẽ làm việc, nhưng không được ghi nhận, bạn có thể thấy nó được đặt đằng sau hậu trường tại các nhà xây dựng jQuery.Event.

+0

Thuộc tính 'originalEvent' được ghi lại tại http://api.jquery.com/category/events/event-object/ trong" thuộc tính đặc biệt ". –

+0

@Mathias: Cảm ơn, tôi sẽ cập nhật bài đăng sau, tài sản không được ghi lại [vào năm 2010] (http://replay.web.archive.org/20100827151056/http://api.jquery.com/ category/events/event-object /). – CMS

+0

Chắc chắn, tôi vừa thêm liên kết vào câu trả lời của bạn để tham khảo trong tương lai ngay bây giờ rằng nó cuối cùng là tài liệu (không chắc chắn khi chính xác điều đó xảy ra). Cảm ơn bạn đã chỉnh sửa bài đăng của mình :) –

Các vấn đề liên quan