Un approccio che potresti tentare di risolvere sarebbe spostare tutti i tuoi comportamenti sul tuo sortable
e utilizzare droppable
solo per fare un passaggio per determinare il comportamento che ti serve. In questo modo, puoi gestire tutto in un unico posto, il che dovrebbe risolvere alcuni degli effetti indesiderati di avere sia sortable
e droppable
sugli stessi elementi. In questo modo:
Nel tuo droppable si imposta l'interruttore su over
e out
e si impostano gli oggetti necessari.
$("li.placeholder").droppable({
accept: "li.to-drag",
hoverClass: "correct",
activeClass: "active",
revert: false,
tolerance: "pointer",
over: function (e, ui) {
curDrag = ui.draggable;
curTarget = e.target;
curThis = $(this);
overSortable = true;
},
out: function (e, ui) {
overSortable = false;
},
drop: function (event, ui) {
}
});
Poi, in caso di beforeStop
sortable
, si controlla se la variabile overSortable
sia vero o no e impostare i comportamenti lì. Tutto ciò che si riferisce a ui.draggable, this ed event.target dovrà essere sostituito dagli oggetti che hai impostato in droppable. Un modo migliore per un evento sarebbe quello di fare in modo che una funzione gestisca tutti questi comportamenti e li trasmetta come argomenti.
beforeStop: function (e, ui) {
if (overSortable) {
curDrag.addClass('placeholder');
var dragging = curDrag.find("img").remove();
curThis.append(dragging).addClass("dropped");
curThis.droppable('disable');
var day = curDrag.attr('data-id');
var index = $(curTarget).index();
//...
} else {
ui.item.addClass('placeholder')
}
ci sono adjusments ancora da fare, non è del tutto chiaro che cosa esattamente dovrebbe accadere e quando, ma questo può rendere più facile lavorare invece di cercare di gestire più eventi di essere licenziato quando si rilascia un elemento, è solo gestirne uno
http://jsfiddle.net/ts290vth/4/
fonte
2015-07-25 21:41:52
già risposto qui [droppable a droppable] (http://stackoverflow.com/questions/5504888/droppable-in-droppable). Usa l'opzione golosa. –
Deve accettare entrambi. Dovrebbe ordinare e aggiungere i segnaposti riservati, ma quando si posiziona un segnaposto dovrebbe essere aggiunto al segnaposto stesso. –
In risposta al tuo aggiornamento, commenta la funzione '// sorting();' e vedrai che non vengono più aggiunti automaticamente. Qualcosa che succede quando si combinano le funzioni di ordinamento e rilascio. – Trevor