it-swarm.com.ru

Как отключить сортировку с помощью jQueryUI sortable?

Я реализовал сортируемый список jQueryUI, и он работает действительно хорошо. В какой-то момент я хочу отключить дальнейшую сортировку и сохранить порядок элементов без изменений, чтобы пользователь не мог его изменить. 

Он попробовал что-то такое:

$('.sortable').sortable('disable'); 

и это: 

$('.sortable').each(function() { $(this).sortable('disable'); });

а также:

$('.sortable').disable(); 

а также:

$('.sortable').cancel(); 

и различные комбинации всего этого. Все без успеха.

Может кто-нибудь сказать нэ Правильный путь™ сделать это?

Обновление: Я использую jQuery 1.3.2 и jQueryUI 1.7.2. Возможная проблема может заключаться в том, что у меня есть два независимых сортируемых списка на странице, поэтому у меня есть классы sortable1 и sortable2. Я на самом деле делаю:

$('.sortable2').sortable('disable'); 

Update2: проблема была в том, что я использовал .sortable вместо #sortable. Теперь все отлично работает.

23
Milan Babuškov

Первый способ - пример, приведенный в документации . Я только что проверил это с одним из моих собственных проектов, и он отлично работает. Какие версии jQuery и jQuery UI вы используете? У меня 1.3.2 и 1.7.2 соответственно.

1
shuckster
$(ui.sender).sortable( "disable" )
32
isxaker

Я был в процессе отладки:

  1. нажмите, чтобы сделать сортируемым
  2. отделка (сортировка отключена)
  3. нажмите, чтобы снова сделать сортировку не сработало
  4. решение/обходной путь: явно отключить опцию false

http://plnkr.co/edit/uX6cNNiYoejYqwQicEhg?p=preview

  function sortableEnable() {
    $( "#sortable" ).sortable();
    $( "#sortable" ).sortable( "option", "disabled", false );
    // ^^^ this is required otherwise re-enabling sortable will not work!
    $( "#sortable" ).disableSelection();
    return false;
  }
  function sortableDisable() {
    $( "#sortable" ).sortable("disable");
    return false;
  }

Надеюсь, это поможет.

10
Michal Stefanow

Спасибо Михал

Я сделал версию для списков, которые могут быть сортируемыми или редактируемыми.

Очень полезно для меня, по крайней мере!

    function sortableEnable() {
        $( "ul" ).sortable();
        $( "ul" ).sortable( "option", "disabled", false );
        $( "li" ).attr("contentEditable","false");
        $( "li" ).css("cursor","move");
        return false;
    }

  function sortableDisable() {
        $( "ul" ).sortable("disable");
        $( "li" ).attr("contentEditable","true");
        $( "li" ).css("cursor","default");
        return false;
    }

    $(function() {
        sortableEnable();
    });
4
Chris Glasier

Хотя предложенные мной посты были полезны, они не решали то, чего я пытался достичь. Я хотел включить и отключить сортировку по нескольким областям и добавить возможность сделать контент снова выбираемым. 

Вот код, который я использовал:

function AddSortable() {

    $("ul").sortable({
        connectWith: "ul",
        disabled: false
    }).disableSelection();  

    return false;
};

function RemoveSortable(){

    $("ul").sortable({ 
        disabled: true 
    }).enableSelection();   

    return false;
}
2
Andi

$( ".selector" ).sortable( "disable" );

от http://api.jqueryui.com/sortable/#option-disabled

2
isync

Для отключения sortable() вы можете использовать

$(".sortable").sortable("disable");

Для переключения включения/выключения по нажатию кнопки с идентификатором toggleButton

$('#toggleButton').click(function() {
    //check if sortable() is enabled and change and change state accordingly
  // Getter
  var disabled = $(".sortable").sortable( "option", "disabled" );
  if (disabled) {
    $(".sortable").sortable( "enable" );
  }
  else {
    $(".sortable").sortable("disable");
  }
});
1
Rahul Gupta

Если вы хотите отключить все сортируемые элементы (как мне было нужно), вы можете использовать класс сортируемых элементов 'ui-sortable' в качестве селектора.

например

$(".ui-sortable").sortable("enable");
$(".ui-sortable").sortable("disable");
0
VorTechS