2013-04-02 14 views
9

Bir sürükle/bırak işlemi sırasında jQuery nesnesini dataTransfer özelliğine iletmeye çalışılıyor. Özelliği jQuert.event.props dizisine ekledikten sonra atayabiliyorum, ancak drop olayında tanımsız olarak geri dönüyor. Burada eksik olduğumdan emin değilim.jQuery geçiş öğesi dataTransfer özelliği

JavaScript:

function dragClip(clip, event){ 

    event.dataTransfer.el = clip; 

    /* Console confirms event.dataTransfer.el is the jQuery object */ 
} 

function dropClip(target, event){ 

    target.append(event.dataTransfer.el); 

    /* event.dataTransfer.el no longer has the object... where'd it go?? */ 
} 

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

$('#titles') 
    .bind('dragenter dragover', false) 
    .bind('drop', function(event){ 

     dropClip($(this), event); 
    }); 

$('.clip').bind('dragstart', function(event){ 

    dragClip($(this), event); 
}); 

GÜNCELLEME: ayrıntı kaldırmak için yeniden yapıldı

. Orada bulunan başka şeyler vardı, ama anonim bir fonksiyon sadece yeterli olacaktır:

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

$('#titles') 
    .bind('dragenter dragover', false) 
    .bind('drop', function(event){ 

     $(this).append(event.dataTransfer.el); 
    }); 

$('.clip').bind('dragstart', function(event){ 

    event.dataTransfer.el = $(this); 
}); 

GÜNCELLEME

@ gereğince Barney'nin nihai cevabı, benim son çalışma kodunu. Orijinal olayı kullanmamın bir nesneyi veri olarak geçirmeme izin vermediğini fark ettim, bunun yerine kimliği uygulayarak jQuery nesnesini bırakarak yeniden oluşturdum. Ayrıca bildirilen işlevlerden kurtulmak için her şeyi sıkın. Daha az kod, aynı sonuç.

$('#titles') 
    .bind('dragenter dragover', false) 
    .bind('drop', function(event){ 

     $(this).append($('#' + event.originalEvent.dataTransfer.getData('clip'))); 
    }); 

$('.clip') 
    .bind('dragstart', function(event){ 

     event.originalEvent.dataTransfer.setData('clip', $(this).attr('id')); 
    }); 
+0

+1. Bu bana yardımcı oldu. –

cevap

17

Şahsen, mümkün olduğunca az jQuery iç yapıları ile oynamak ve mümkün olduğunca orijinal olay nesnesini ayıklamak deneyin. Geçmişte sürükle ve bırak özelliğini kullanırken, her zaman event.originalEvent.dataTransfer'u kullandım. Bu "UPDATE" bölümü için

+0

Evet, böyle bir şey düşündüm. Sadece çok garip - jquery nesnesini dataTransfer özelliğine ekleyebilmeliyim. Bunu vanilla JS'de yapabilirim, jQuery'de neden farklı çalışacağından emin değilim, eğer dataTransfer's event olayı dizisi – technopeasant

+0

'a eklendi ise, jQuery internals ile mümkün olduğunca az oynamaya çalışıyorum. Geçmişte sürükle ve bırak işlevini kullanırken, daima "event.originalEvent.dataTransfer" işlevini kullandım. – Barney

+1

Faydalı bir şekilde, jQuery çalışmalarına dataTransfer eklemek yerine bunu kullanın. Cevabını kabul ettim ve yardımı takdir ettim. Cevabınızı, başkalarının referansları için event.originalEvent hakkındaki öneriniz ile ekleyebiliyorsanız minnettar olurum – technopeasant