2012-03-05 27 views
16

này đang làm việc:Bind mẹ đẻ html5 dragstart xử lý sự kiện và truy cập dataTransfer sử dụng jQuery

$(".my_dragging_class").each(makeDraggable($(this).get()[0])); 

var makeDraggable = function (el){ 
    el.draggable = 'true'; 
    el.addEventListener('dragstart', function(e){ 
       e.dataTransfer.effectAllowed = 'move'; 
       e.dataTransfer.setData('text/html', 'test'); 
       console.log('dragstart'); 
       }, 
      false); 
} 

này là không làm việc: Thông điệp

$(".my_dragging_class").makeDraggable(); 

$.fn.makeDraggable(){ 
    $(this).attr('draggable','true'); 
    $(this).bind('dragstart', function(e){ 
       e.dataTransfer.effectAllowed = 'move'; 
       e.dataTransfer.setData('text/html', 'test'); 
       console.log('dragstart'); 
       }, 
      false); 
} 

Lỗi: tôi nhận được một 'e.dataTransfer không được xác định' cho dòng e.dataTransfer.effectAllowed = 'move';. Trình duyệt của tôi là FireFox 10.0.2

Có thể sử dụng dataTransfer với jQuery theo cách này không?

Trả lời

47

Hãy thử:

$.fn.makeDraggable(){ 
    $(this).attr('draggable','true'); 
    $(this).bind('dragstart', function(e){ 
       e.originalEvent.dataTransfer.effectAllowed = 'move'; 
       e.originalEvent.dataTransfer.setData('text/html', 'test'); 
       console.log('dragstart'); 
       }, 
      false); 
} 

Các jQuery event object không có một tài sản dataTransfer.

+0

Làm thế nào tương thích là phương pháp này? Tất cả những gì bạn đã làm là nối thêm "originalEvent", phải không? Cảm ơn. – tundoopani

+1

@tundoopani [Tương thích này] (http://caniuse.com/#search=drag%20and%20drop) – robertc

+0

Tôi rất mới đối với jQuery, nhưng khi bạn thêm sai ở cuối hàm liên kết, nó sẽ ngăn tôi khỏi kéo. Loại bỏ sai và tất cả các công trình như mong đợi. –

6

Các jQuery event object không có một tài sản dataTransfer ... đúng, nhưng người ta có thể thử:

jQuery.event.props.push('dataTransfer'); 

kr, Zara

+0

Chính xác nó làm gì? Một lời giải thích sẽ làm cho câu trả lời này hữu ích hơn. – fuxia

+1

toscho -> Per: http://api.jquery.com/category/events/event-object/ - Một số sự kiện có thể có các thuộc tính cụ thể cho chúng. Chúng có thể được truy cập như các thuộc tính của đối tượng event.originalEvent. Để tạo các thuộc tính đặc biệt có sẵn trong tất cả các đối tượng sự kiện, chúng có thể được thêm vào mảng jQuery.event.props. Điều này không được khuyến khích, vì nó bổ sung thêm chi phí cho mọi sự kiện được cung cấp bởi jQuery. – Joe

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