2013-03-12 10 views
24

Możliwe jest wyłączenie jquery ui sortable tylko dla jednego elementu listy? Oto przykładowy kod:jquery ui sortable disable dla jednego li itema

<ul class="sortable"> 
    <li>Item 1</li> 
    <li>Item 2</li> 
    <li>Item 3</li> 
    <li>Item 4</li> 
    <li>Item 5</li> 
</ul> 

Na przykład będę wyłączyć sortable po kliknięciu elementu. Proszę o pomoc.

Oto kod javascript:

$(document).ready(function(){ 
    $('.sortable li').click(function(){ 
     // Disable sortable for this item............. 
    }); 
}); 
+1

[Co próbowałeś?] (Http://whathaveyoutried.com) Czy możesz dołączyć swoją wersję Javascript? –

+2

http://api.jqueryui.com/sortable/#option-cancel <- zająłem 5 sekund, aby znaleźć. – Mahn

+0

możliwy duplikat [jquery-ui sortable, zapobiec przeniesieniu elementu] (http://stackoverflow.com/questions/2006401/jquery-ui-sortable-prevent-item-from-being-moved) – Tibo

Odpowiedz

41

Jasne, spróbuj coś takiego:

$(".sortable").sortable({ 
     items: "li:not(.unsortable)" 
    }); 
$(".sortable").disableSelection(); 

Używając items option można określić elementy, które mogą i nie mogą być sortowane.

jsFiddle example

+0

Można go wyłączyć po kliknięciu elementu listy –

+0

Nie rozumiem, co masz na myśli. – j08691

+0

na przykład $ (". Sortable li").click (function() {/ * wyłącz tę pozycję * /}); –

20

można jednoznacznie wykluczyć elementy (poza tym, nie je):

$(".sortable").sortable({ 
    cancel: ".disable-sort-item" 
}); 
+2

najprostszy do zaimplementowania. –

+0

Jest to łatwe, ale wyłączony element może zostać przeniesiony w górę lub w dół za pomocą grupy list. Odpowiedź j08691 działa we wszystkich scenariuszach. –

4

wiem, to pytanie jest stary. ale dam ci znać właściwą odpowiedź. Jak dynamicznie włączać i wyłączać element poprzez kliknięcie. Ponieważ mam ten sam problem w 2016 roku: D

po pierwsze. Wszystko, co musisz zrobić, to ustawić elementy na sortable, co zostanie wyłączone na starcie. Dodaj parametr co usunąć przedmioty wyłączone z listy (nie jest to konieczne na pierwszym pliku init):

var sortable = $("#sortable-sections"); 
sortable.sortable({ 
    items: 'li:not(.ui-state-disabled)', 
    helper: 'clone', 
}); 
sortable.disableSelection(); 

(Bootstrap stosowany w przykładzie)

Wtedy właśnie dodać detektor zdarzeń, użyłem onClick, więc przykład tutaj:

sortable.find('li').click(function() { 
    $(this).toggleClass('ui-state-disabled'); 
    $(this).hasClass('ui-state-disabled') ? $(this).removeData('sortableItem') : false; 
}); 

Sortowalny przedmiot będzie można sortować tylko wtedy, gdy ma dane o nazwie sortableItem, dzięki czemu stanie się dynamicznie wyłączony, mam nadzieję, że komuś pomaga.

Pozdrawiam!

Powiązane problemy