Я сделал аналогичную вещь, когда создал массив для хранения индекса отброшенного перетаскиваемого объекта, например:
var $drop = $(selector for my droppable),
$drag = $(selector for my draggable),
dragged = [];
$drop.droppable({
drop: function (e, ui) {
var dragIndex = $drag.index(ui.draggable);
dragged[$drop.index($(this))] = dragIndex;
}
});
Затем, чтобы повторно включить перетаскиваемый элемент в функции отмены, вы бысделать что-то вроде этого:
$('.cancel a').click(function() {
var clickIndex = $(selector for droppable).index($(this).parent()),
whichDrag = dragged[clickIndex];
$drag.eq(whichDrag).draggable("enable");
});
Я предполагаю, что элемент, возвращаемый $(this).parent()
, соответствует элементам в вашем селекторе для отбрасываемого, если нет, вам придется сделать другой обход.
Основная идея состоит в том, чтобы найти индекс перетаскиваемого элемента, сохранить его в массиве dragged
в позиции, равной индексу элемента, на который он отброшен.Затем при отмене вы используете индекс элемента, в который было перетащено перетаскиваемое значение, чтобы получить значение из массива dragged
, которое соответствует исходной позиции перетаскивания, и затем включить его.