Provare a passare un oggetto jQuery alla proprietà dataTransfer
durante una sequenza di trascinamento/rilascio. Dopo aver aggiunto la proprietà alla matrice jQuert.event.props
, sono in grado di assegnarla, ma restituisce un valore non definito durante l'evento drop
. Non sono sicuro di cosa mi manchi qui - sembra davvero semplice.jQuery passa elemento alla proprietà dataTransfer
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);
});
UPDATE:
Riscritto per rimuovere la verbosità. Aveva altre cose incluse in là, ma una funzione anonima farà bene:
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);
});
UPDATE
Come da @ risposta finale di Barney, il mio codice di lavoro finale. Ho notato che l'utilizzo dell'evento originale non mi permetteva di passare un oggetto come dati, così invece ho applicato l'ID e ho ricostruito l'oggetto jQuery alla caduta. Anche serrato tutto alzando le funzioni dichiarate. Meno codice, stesso risultato.
$('#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'));
});
+1 per questa parte "AGGIORNAMENTO". Questo mi ha aiutato. –