2011-02-27 17 views
21

Kesinlikle ortak sıralanabilir vaka arasında sürükleyerek İptal:içerisinde sıralama öğe

<script> 
$(function() { 
    $("#sortable").sortable(); 
}); 
</script> 

<ul id="sortable"> 
    <li>Item 1</li> 
    <li>Item 2</li> 
    <li>Item 3</li> 
</ul> 

Sorun. bazı şartla bir öğenin süremeyi iptal etmek gerekiyor ve Andrew Whitaker iyi bir tavsiye var, ama bu yaklaşım sortables için jquery-ui-sürüklenebilir için tek çalışan ve başarısız:

$("#sortable").sortable({ 
    start: function() { 
    return false; // will still cause `this.helper is null` 
    } 
}); 

öneriler için greateful olacak.

cevap

13

sort fonksiyonu geri sürüklenebilir (demo) sürükle olarak sıralama için aynı işi yapar:

$("#sortable").sortable({ 
    sort: function() { 
     if ($(this).hasClass("cancel")) { 
      $(this).sortable("cancel"); 
     } 
    } 
}); 
+0

thanx, fudgey! – mcmlxxxiii

+23

çalışır Bu bir hata fırlatır: "Yakalanmamış TypeError:" 0 "özelliği okunamıyor" 0 "özelliği" 0 "okunamıyor" –

+0

http://stackoverflow.com/questions/18470835/jquery-sortable-cancel-event-if-not-valid –

26

sıralanabilir bir "iptal" yeteneği sortable('cancel') kullanılarak çağrılır sahiptir.

Dokümanlar: "Geçerli sıralamasında bir değişikliği iptal eder ve geçerli sıralama başlatılmadan önce duruma geri döndürür." Bakınız http://api.jqueryui.com/sortable/#method-cancel.

Örnek kullanım:

$("#sortable").sortable({ 
    stop: function(e, ui) { 
    if ("I need to cancel this") { 
     $(ui.sender).sortable('cancel'); 
    } 
    } 
}); 
+7

' ui .sender 'burada kullanılamaz çünkü' gönderen ', bir sıradan diğerine (http://api.jqueryui.com/sortable/#event-stop) taşınıyorsa ürünün gelip gelebileceğinin sorgulanmasıdır. Eğer bu tek tek kullanımlık kullanım istiyorsanız '$ (this) .sortable ('cancel')' – Odys

+1

@Odys bunu eklediğiniz için çok teşekkür ederim –

17

dinamik sıralanamayan şeyler yapmak için büyük eserler anlaşılacağı falsefudgey olarak dönersek, aynı zamanda siz de statik unsortables kurmak sağlayan sıralanabilir yapılandırmasında cancel option var:

$("#sortable").sortable({ 
    // this prevents all buttons, form fields, and elemens 
    // with the "unsortable" class from being dragged 
    cancel: ":input, button, .unsortable" 
}); 
+0

Onları CSS sınıfına uygulayan elemanların altındaki herhangi bir yuvalanmış sıralamanın (örneğin; yuvalanmış ağaç görünümleri dahilinde), bu sınıfı uygulamamış olsalar bile sıralama için devre dışı bırakılacaktır. – Jason

6

deneyin this example

 
$('#list1').sortable({ 
    connectWith: 'ul' 
});  

$('#list2').sortable({ 
    connectWith: 'ul', 
    receive: function(ev, ui) { 
     if(ui.item.hasClass("number")) 
      ui.sender.sortable("cancel"); 
    } 
}); 
+0

süper harika .. bu yarım gün sürdü ve günün sonunda cevap burada – Fury

+0

Sadece gerektiği gibi classname dayalı büyük uygulama. – Aries51