Если я правильно понимаю ваш вопрос, вы хотите условно принять удаленный элемент на основе пользовательского кода. Ответ Аберона - типичный случай: вы хотите разрешить удаление только определенных перетаскиваемых опций в зависимости от их класса, а все остальные вернутся назад. Если это отвечает на ваш вопрос, тогда хорошо.
Однако есть случай, когда анимация возврата происходит условно на основе чего-то более сложного, чем совпадение классов. В моем собственном проекте я использую drag-drop для добавления пользователей в группу. Если удаленный пользователь уже находится в группе, я хочу, чтобы вспомогательный элемент пользователя вернулся обратно. В противном случае я продолжаю действие AJAX, чтобы вставить их. Это не заменит внутреннюю проверку, но это хорошая визуальная обратная связь.
Я искал простой ответ на этот вопрос. Примечание для сопровождающих JQuery: для меня самым простым способом было бы добавить какое-либо свойство к объекту события в функции удаления, например так:
$('.target').droppable({
accept: '.valid'
drop: function(event, ui) {
if(isDropOK() == true) {
// add child here
} else {
event.revert = true;
}
}
});
К сожалению, это не работает. Вот что работает, хотя: установите перетаскиваемый элемент, чтобы он всегда возвращался, а затем скрывайте помощника, если условие выполнено. Вы можете получить ссылку на помощника, ища единственный элемент на странице, который имеет класс ".ui-draggable-dragging". Вот пример, замените «isDropOK ()» вашей собственной логикой:
$('.valid').draggable({
revert: true,
helper: 'clone',
opacity: 0.5
});
$('.target').droppable({
accept: '.valid'
drop: function(event, ui) {
if(isDropOK() == true) {
$('.ui-draggable-dragging').hide();
// add child here
}
}
});
Итак, подведем итог, каждый элемент всегда будет возвращаться, если вы не вступите в событие drop и не скроете помощника вручную. Возвратная анимация все равно будет происходить, но ваши пользователи ее не увидят. Это немного взломать, но конечный результат, кажется, работает хорошо.