Подтвердить что ты не робот

Отмена перетаскивания сортируемого элемента

Абсолютно общий сортируемый случай:

<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`
  }
});

Будет приветствоваться предложениями.

4b9b3361

Ответ 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");
    }
});