2009-12-24 19 views
8

Seri halinde arama yöntemini kullanarak, seri hale getirme yöntemini doğrudan arayarak seri hale getirilmiş öğelerin listesini UL tarafından jquery'de almak mümkün mü? Kod parçacığı:Jquery sıralanabilir ('serialize')

var sortableLinks = $("#category_links_list_3"); 
var linkOrderData = $(sortableLinks).sortable('serialize'); 

category_links_list_3 UL

DOM yapısının id geçerli:

<div class="hidden" id="inline_list_3"> 
    <ul class="category_links_list ui-sortable" id="category_links_list_3"> 
     <li class="link_title ui-state-default" id="category_link_8">Coconut Oil</li> 
     <li class="link_title ui-state-default" id="category_link_9">Hempseed</li> 
    </ul> 
</div> 

Teşekkür ...

cevap

21

Sonunda cevabı aldım! Üstüne serialize yöntemini çağırmadan önce UL sıralanabilir ilk yapmanız gerekir:

var sortableLinks = $("#category_links_list_3"); 
$(sortableLinks).sortable(); 
var linkOrderData = $(sortableLinks).sortable('serialize'); 

Bu kez linkOrderDatacategory_link [] = 8 & category_link [] = 9

16

serialize boş bir dize döndürürse id özelliklerinin alt çizgi içermesini sağlayın. Formda olmalıdırlar: "set_number" Örneğin, foo_1, foo_5, foo_2 kimlik özniteliklerine sahip 3 öge listesi, [] = 1 & foo [] = 5 & foo [] = 2'ye serileştirilecektir. Seti ve sayıyı ayırmak için alt çizgi, eşit işareti veya kısa çizgi kullanabilirsiniz. Örneğin, foo = 1 veya foo-1 veya foo_1 hepsi foo [] = 1 olarak serileştirilir. Bir örneğe göre,

. onu kullandım. bu yüzden. 2 tane gördüm seni.

http://jqueryui.com/demos/sortable/#method-serialize

sana yardımı olabilir ısırıyorlar.

+0

Uygun şekilde biçimlendirilmiş kimlikleri yerinde yapıyorum.Arama yöntemini kullanabilirim, ancak DOM yapısından görebildiğiniz gibi, UL görünmüyor ve bu nedenle olayları tetikleyemiyor. – KalenGi

+0

Evet, bana da yardımcı oldu –

3

var formStr = $ ('# konteyner') seri hale()

Eklendi:. Bu form elemanları için çalışacaktır. Ayrıca kendi serileştirmeyi de şu şekilde yapabilirsiniz:

function serializeList(container) 
{ 
    var str = '' 
    var n = 0 
    var els = container.find('li') 
    for (var i = 0; i < els.length; ++i) { 
    var el = els[i] 
    var p = el.id.lastIndexOf('_') 
    if (p != -1) { 
     if (str != '') str = str + '&' 
     str = str + el.id.substring(0, p) + '[]=' + (n + 1) 
     ++n 
    } 
    } 
    return str 
} 

alert(serializeList($('#container'))) 
+0

Bunu denedim ve işe yaramıyor .. – KalenGi

+0

Eğer hiçbir form ids yoksa, kendi fonksiyonunuzu – jspcal

+0

üstünde yuvarlayabilirsiniz. Bu kesinlikle serileştirme fonksiyonunu tekrarlar. Aşağıdaki cevabımda ayrıntılı olarak yaptığım gibi bir şey. – KalenGi

1

ben başardı içeriyor Bu fonksiyonu split kullanarak çalışıyor. Sınıfınızda birden fazla altçizgi varsa,

function serializeList(container) 
{ 
    var str = '' 
    var n = 0 
    var els = container.find('tr') 
    for (var i = 0; i < els.length; ++i) { 
    var el = els[i] 

    var p = el.id.lastIndexOf('_') 
    **var getIdNumber = el.id.split("_");** 

    if (p != -1) { 
     if (str != '') str = str + '&' 
     str = str + el.id.substring(0, p) + '[]=' + **getIdNumber[1]** 
     ++n 
    } 
    } 
    return str 
} 
+0

iyi bir ekleme, ancak artık kullanılmadığı için n = 0 ve ++ n'yi kaldırmalısınız. –

0

dizini değiştirmeniz gerekebilir. Bu yazı çok yardımcı oldu. Ek yardım arıyorsanız, işte nasıl çalıştığımı (haml-rayları kullanarak). ToArray işlevini kullanmak biraz farklıdır. `Serialize kullanılıyorsa veri maddelik =" veri öğesi' siz yine niteliğini ayarlamak zorunda kalacak '_ # {id}'.

kadar çok programlama çözümlerini bildiği için, Internet teşekkür ederiz.

:css 
    #sortable { list-style-type: none; margin: 40 20; padding: 0; width: 500; } 
    #sortable li { margin: 0 3px 3px 3px; padding: 0.4em; padding-left: 1.5em; font-size: 1.4em; height: 18px; } 
    #sortable li span { position: absolute; margin-left: -1.3em; } 

:javascript 
    $(function() { 

    $("#sortable").sortable({ 
     update: function(event, ui) { 
     var data = $("#sortable").sortable('toArray', {attribute: "data-item"}); 
     // return ids in order after update 
     //alert(JSON.stringify(data)); 
     $.ajax({ 
      type: "PATCH", 
      async: true, 
      url: "/calendar/update_order.json", 
      data: JSON.stringify(data), 
      dataType: 'json', 
      contentType: 'application/json', 
      error: function(data) { return false; }, 
      success: function(data) { return false; } 
     }); 
     } 
    }); 
    $("#sortable").disableSelection(); 

    }); 

#sort_tickets 
    %ul#sortable 
    - @tickets.each do |ticket| 
     %li.ui-state-default(data-item="#{ticket.id}")< 
     %span.ui-icon.ui-icon-arrowthick-2-n-s< 
     = ticket.customer 
İlgili konular