Отмена перетаскивания сортируемого элемента
Абсолютно общий сортируемый случай:
<script>
$(function() {
$("#sortable").sortable();
});
</script>
<ul id="sortable">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
Проблема. Необходимо отменить перетаскивание элемента в определенном состоянии, и есть хороший совет Andrew Whitaker, но этот подход работает только для jquery-ui-draggable и не подходит для сортировок:
$("#sortable").sortable({
start: function() {
return false; // will still cause `this.helper is null`
}
});
Будет приветствоваться предложениями.
Ответы
Ответ 1
Функция обратного вызова функции sort
делает то же самое, что и перетаскивание для draggable (demo):
$("#sortable").sortable({
sort: function() {
if ($(this).hasClass("cancel")) {
$(this).sortable("cancel");
}
}
});
Ответ 2
Сортировка имеет функцию "отменить", вызванную с помощью sortable('cancel')
.
Из документов: "Отменяет изменение текущей сортировки и возвращает ее в состояние до начала текущего сортировки". См. http://api.jqueryui.com/sortable/#method-cancel.
Пример использования:
$("#sortable").sortable({
stop: function(e, ui) {
if ("I need to cancel this") {
$(ui.sender).sortable('cancel');
}
}
});
Ответ 3
Возвращая false
как fudgey, предлагает отличные работы для того, чтобы сделать вещи динамически несортируемыми, но также cancel
в сортируемой конфигурации, которая также позволяет настроить статические несортировки:
$("#sortable").sortable({
// this prevents all buttons, form fields, and elemens
// with the "unsortable" class from being dragged
cancel: ":input, button, .unsortable"
});
Ответ 4
Попробуйте этот пример
$('#list1').sortable({
connectWith: 'ul'
});
$('#list2').sortable({
connectWith: 'ul',
receive: function(ev, ui) {
if(ui.item.hasClass("number"))
ui.sender.sortable("cancel");
}
});