Хорошо, я нашел решение! Это уродливо и нарушает «правила инкапсуляции», но, по крайней мере, оно делает свою работу.
Помните это только для особых случаев ! JQuery прекрасно справляется с удалением своего помощника. В моем случае у меня был помощник, который иногда был исходным элементом, а иногда клоном, поэтому не всегда было целесообразно удалять помощника после возврата.
element.draggable({
stop : function(e, ui) {
/* "dropped_on_droppable" is custom and set in my custom drop method
".moved_draggable" is custom and set in my custom drag method,
to differentiate between the two types of draggables
*/
if (!ui.helper.dropped_on_droppable & ui.helper.hasClass('moved_draggable')) {
/* this is the big hack that breaks encapsulation */
$.ui.ddmanager.current.cancelHelperRemoval = true;
}
},
Предупреждение: это нарушает инкапсуляцию и может быть несовместимо