Mi solución es similar a la de Likwid_T, excepto que utiliza el evento drop
lanzables, así como el mantenimiento de los vínculos entre draggables y droppables en lugar de lanzables del evento out
. Creo que el problema con el uso de out
es que se dispara incluso cuando se arrastra un elemento arrastrable sobre un elemento desplegable ya "completo" y luego "sale" de él.
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 característica relacionada es que uno arrastra un elemento más de un lanzables que ya tiene una arrastrable, el viejo conseguiría sustituir y volver a su posición inicial. Así es como lo hago:
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);
},
});
bien, pero cuando me libero este campo lanzables, cómo hazlo de nuevo desplegable –
@Emil - Puedes usar '" deshabilitar "' luego '" habilitar "' más tarde en lugar de '" destruir "' si necesitas volver a habilitarlo :) –
lo hice, pero no sé cómo para habilitarlo. Intenté con: enable_Droppable, pero no funcionó. ¿Qué debo usar en lugar de 'salir' –