La mia soluzione è simile a Likwid_T di, tranne che utilizza il droppable drop
evento oltre a mantenere i legami tra draggables e droppables invece di di droppable dell'evento out
. Penso che il problema con l'utilizzo di out
è che viene attivato anche quando un trascinamento viene trascinato su un "droppable" completo e quindi "out" di esso.
droppable({
drop: function(event, ui) {
var $droppable = $(this);
var $draggable = ui.draggable;
// If the draggable is moved from another droppable, unlink it from the old droppable
var oldDropped = $draggable.data('dropped');
if(oldDropped) {
$draggable.data('dropped', null);
oldDropped.data('dragged', null);
}
// Link the draggable and droppable
$draggable.data('dropped', $droppable);
$droppable.data('dragged', $draggable);
},
accept: function() {
// Only accept if there is no draggable already associated
return !$(this).data('dragged');
}
});
Una caratteristica correlato è che si trascina un elemento in una droppable che ha già un trascinabile, il vecchio otterrebbe sostituito e tornare alla sua posizione iniziale. Questo è come lo faccio:
droppable({
drop: function(event, ui) {
var $droppable = $(this);
var $draggable = ui.draggable;
// Reset position of any old draggable here
var oldDragged = $droppable.data('dragged');
if(oldDragged) {
// In the CSS I have transitions on top and left for .ui-draggable, so that it moves smoothly
oldDragged.css({top: 0, left: 0});
oldDragged.data('dropped', null);
}
// If the draggable is moved from another droppable, unlink it from the old droppable
var oldDropped = $draggable.data('dropped');
if(oldDropped) {
$draggable.data('dropped', null);
oldDropped.data('dragged', null);
}
// Link the draggable and droppable
$draggable.data('dropped', $droppable);
$droppable.data('dragged', $draggable);
},
});
ok, ma quando ho gratuitamente questo campo droppable, come rendilo nuovamente trascinabile –
@Emil - Puoi usare '" disable "' quindi '" enable "' successivamente invece di '" destroy "' se hai bisogno di riattivarlo :) –
l'ho fatto, ma non so come per abilitarlo. Ho provato senza: enable_Droppable, ma non ha funzionato. Cosa dovrei usare al posto di 'out' –