2013-06-08 36 views
7

Tôi đã tìm thấy một javascript liên quan đến API Trình đọc tệp HTML5. Nó được viết bằng javascript thuần túy, tôi đang trong quá trình chuyển đổi nó thành một kịch bản lệnh jQuery. Nhưng tôi đang gặp khó khăn vào thời điểm này.Tại sao JavaScript này hoạt động trơn tru và jQuery tương đương thất bại?

này hoạt động:

document.getElementById('drop-area').addEventListener('drop', function(e) { 
    e.preventDefault(); 
    e.stopPropagation(); 
    console.log(e.dataTransfer.files); // outputs the right stuff 
}, false); 

này thất bại:

$('#drop-area').on('drop', function(e) { 
    e.preventDefault(); 
    e.stopPropagation(); 
    console.log(e.dataTransfer.files); // ERROR: e.dataTransfer is undefined 
}); 

một giải pháp cho vấn đề này là gì?

+0

Nếu bạn có mã tương đương, tại sao không chỉ sử dụng JS thuần túy vì nó nhanh hơn? – Markasoftware

+0

@Markasoftware phần còn lại của ứng dụng của tôi là sử dụng jQuery tôi thay vì có một cơ sở mã thống nhất. Ngoài ra các phần của kịch bản lệnh này liên quan đến thao tác DOM tùy chỉnh, điều này cũng sạch hơn/không gây hại với jQuery. – TK123

+0

@ TK123 Nếu bạn muốn có một codebase thống nhất, chỉ cần sử dụng JavaScript đơn giản. Sau khi tất cả, ngay cả toán tử '+' là JavaScript thuần túy, vì vậy chỉ bằng cách sử dụng jQuery bạn đang không nhất quán. –

Trả lời

11

jQuery không bình thường hóa thuộc tính sự kiện dataTransfer, để truy cập nó, bạn sẽ phải trải qua sự kiện ban đầu.

console.log(e.originalEvent.dataTransfer.files); 

Bạn cũng có thể đặt để dataTransfer được thêm vào đối tượng sự kiện jQuery như sau.

jQuery.event.props.push("dataTransfer"); 
Các vấn đề liên quan