2011-12-20 42 views
6

Tôi sử dụng jQuery và có thể kéo từ jqueryUI. Khi tôi cập nhật jQuery từ 1,6 đến 1,7 thuộc tính clientX và pageX biến mất khỏi biến sự kiện. Dưới đây là một ví dụ:jQuery 1.7 clientX/pageX undefined

http://jsbin.com/ezulas/7/edit

Nếu trong ví dụ cho jQuery phiên bản được thay đổi để 1.6.4 - nó bắt đầu làm việc. Với bản phát hành mới nhất - cả clientX/Y và pageX/Y đều không hoạt động. Tôi phát hiện ra tôi có thể sử dụng e = e.originalEvent - nhưng điều đó dường như không phải là giải pháp thích hợp.

+0

Tôi gặp vấn đề tương tự chính xác này. Tôi nghĩ rằng nó là một lỗi mới đối phó với cách nó bị ràng buộc. Ví dụ: nếu bạn thử: $ (document) .bind ('click', function (e) {console.log ("e.pageX:" + e.pageX + ", e.pageY:" + e.pageY) ;}); nó hoàn toàn hoạt động tốt. Bạn đã đăng nhập một lỗi với jquery? – Matt

+0

Tôi đã không đăng nhập nó, tôi nghĩ ai đó đã nhận thấy lỗi lớn như vậy. – Thinker

+0

Có vẻ như ai đó đã http://bugs.jquery.com/ticket/10729. Lỗi này vẫn còn mở và đã có nhiều cuộc tranh luận về việc liệu nó có nên được sửa và không. – JosephL

Trả lời

7

event.layerX và event.layerY: Chúng tôi đã xóa các thuộc tính phi tiêu chuẩn này trong phiên bản 1.7. Mặc dù thông thường chúng tôi đã đi thông qua khoảng thời gian thông báo không dùng nữa cho các phiên bản này, phiên bản Chrome 16 sẽ tạo ra một loạt thông báo cảnh báo trên bảng điều khiển trên trang. Do điều này, chúng tôi đã quyết định xóa chúng ngay lập tức. Trên các nền tảng vẫn còn hỗ trợ các thuộc tính này, chúng có sẵn thông qua sự kiện.originalEvent.layerX và event.originalEvent.layerY.

Nguồn: http://blog.jquery.com/2011/11/03/jquery-1-7-released/

Khi bạn console.log(e); bên trong xử lý sự kiện dragstop của bạn, bạn có thể thấy rằng tất cả các x/y phối hợp dữ liệu là mất tích trong jQuery 1,7; nhưng nó có thể được truy cập trong event.originalEvent.

CẬP NHẬT

Nếu bạn nhìn xung quanh trong đối tượng event bạn có thể tìm pageX/pageY trong origionalEvent tài sản:

$('#test').html(e.originalEvent.pageX+','+e.originalEvent.pageY); 

Dưới đây là một phiên bản cập nhật của jsbin của bạn: http://jsbin.com/ezulas/13/edit

+1

Câu trả lời của bạn có vẻ không liên quan. Trong câu hỏi của tôi, tôi đã chỉ ra originalEvent. Trong tài liệu jQuery bạn có thể đọc, có các biến event.pageX và pageY, mà bạn CÓ THỂ SỬ DỤNG. Và họ làm việc với 1,7. Nhưng không phải trong trường hợp cụ thể của tôi. – Thinker

+1

Tôi đã bỏ lỡ điều gì? Nếu bạn thay đổi 'e.pageX' thành' e.originalEvent.pageX', bạn sẽ nhận được vị trí nằm ngang của sự kiện. Bạn còn muốn làm gì nữa? – Jasper

+2

Trong tài liệu jQuery được viết, chúng tôi truy cập pageX bằng cách sử dụng event.pageX: http://api.jquery.com/event.pageX/ Nhưng điều này không hoạt động và tôi tự hỏi về cách thay vì giải quyết nó, hơn là sử dụng cách giải quyết. – Thinker

0

Trong tài liệu jQuery cho Event Object, nó cho biết

Các thuộc tính sau cũng được sao chép vào đối tượng sự kiện, mặc dù một số các giá trị của họ có thể không xác định tùy thuộc vào sự kiện:

altKey, bong bóng, nút, hủy ngang, charCode, clientX, clientY, ctrlKey, currentTarget , dữ liệu, chi tiết, eventPhase, metaKey, OffsetX, OffsetY, originalTarget, Trang X, Y, prevValue, relatedTarget, screenX, Screeny, shiftKey, mục tiêu, quan điểm, mà

mà dường như để phù hợp với những gì bạn đang nói. Trong tình huống sự kiện của bạn không có pageX và pageY được xác định.

+1

Nhưng nó đã được xác định trong jQuery 1.6, không hiểu tại sao bây giờ nó được xác định trong originalEvent.clientX – Thinker

1

Tôi đã gặp vấn đề tương tự và đã tìm kiếm các chủ đề tương tự trong một thời gian dài. Nó bây giờ là khá muộn, nhưng tôi hy vọng điều này sẽ vẫn tiết kiệm một số coders hạnh phúc từ tuyệt vọng. Tôi đã kiểm tra tệp jQuery UI Touch Punch mà tôi cũng đang sử dụng trong dự án của mình và tìm thấy cách nó đề cập đến vị trí x/y. Đây là những gì cuối cùng làm việc cho tôi:

$('.pages').on('touchstart vmousedown', function(e){ 
    var this_event_touch_start_Y = e.originalEvent.changedTouches[0].clientY; 
    var this_event_touch_start_X = e.originalEvent.changedTouches[0].clientX; 
}); 

Để tham khảo, đây là một danh sách tất cả các file jQuery Tôi đang sử dụng:

  • jquery-3.1.1.min.js
  • jquery. touchSwipe.min.js
  • jquery-ui.min.js
  • jquery.ui.touch-punch.min.js
  • jquery.mobile-1.4.5.min.js
Các vấn đề liên quan