2012-03-05 10 views
16

To działa:Bind natywnej obsługi HTML5 dragstart wydarzenie i dostęp DataTransfer użyciu 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); 
} 

to nie działa: Komunikat

$(".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); 
} 

Błąd: otrzymam "e.dataTransfer jest niezdefiniowany" dla linii e.dataTransfer.effectAllowed = 'move';. Moja przeglądarka to FireFox 10.0.2

Czy w ten sposób można użyć funkcji dataTransfer z jQuery?

Odpowiedz

47

Spróbuj:

$.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); 
} 

jQuery event object nie posiada własności dataTransfer.

+0

Jak kompatybilny jest ta metoda? Wszystko co zrobiłeś, to dopisać "originalEvent", prawda? Dzięki. – tundoopani

+1

@tundoopani [ta kompatybilna] (http://caniuse.com/#search=drag%20and%20drop) – robertc

+0

Jestem bardzo nowa w jQuery, ale gdy dodasz fałsz na końcu funkcji wiązania, uniemożliwi mi to włóka. Usunięcie fałszu i wszystkich prac zgodnie z oczekiwaniami. –

6

jQuery event object nie posiada własności DataTransfer ... prawda, ale można spróbować:

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

kr, zara

+0

Co dokładnie robi? Wyjaśnienie sprawiłoby, że ta odpowiedź byłaby bardziej użyteczna. – fuxia

+1

toscho -> Per: http://api.jquery.com/category/events/event-object/ - Niektóre zdarzenia mogą mieć właściwości właściwe dla nich. Dostęp do nich można uzyskać jako właściwości obiektu event.originalEvent. Aby udostępnić specjalne właściwości we wszystkich obiektach zdarzeń, można je dodać do tablicy jQuery.event.props. Nie jest to zalecane, ponieważ dodaje narzut do każdego zdarzenia dostarczanego przez jQuery. – Joe

Powiązane problemy