2009-12-24 133 views
8

是否有可能通過直接調用serialize方法而不是使用回調從jquery中的UL獲取序列化的項目列表?代碼片段:jquery sortable('serialize')

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

category_links_list_3是UL

DOM結構的ID是:

<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> 

謝謝...

回答

21

我終於得到了答案!你需要調用它的序列化方法之前,在UL排序第一:

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

這次linkOrderData包含category_link [] = 8 & category_link [] = 9

16

如果序列化返回一個空字符串,確保id屬性包含下劃線。它們必須採用以下形式:「set_number」例如,具有id屬性foo_1,foo_5,foo_2的3個元素列表將序列化爲foo [] = 1 & foo [] = 5 & foo [] = 2。您可以使用下劃線,等號或連字符來分隔組和數字。例如,foo = 1或foo-1或foo_1全部序列化爲foo [] = 1。

以上就是一個例子。我用它。這就是爲什麼。我看到了你。

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

它migth是幫助你。

+0

我有適當的格式化的ID,我可以使用回調方法,但正如你可以從DOM結構看到的,UL是不可見的,因此不能觸發事件 – KalenGi 2009-12-24 21:48:09

+0

是的,它對我也有幫助 – 2013-04-23 13:22:00

3

VAR formStr = $( '#集裝箱')序列化()

補充:這將表單元素的工作。你也可以這樣推出自己的序列號:

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

I試試這個,它不起作用。謝謝! – KalenGi 2009-12-24 21:46:16

+0

如果沒有形式的ID,你可以推出你自己的函數,如上 – jspcal 2009-12-24 22:24:02

+0

這肯定複製了序列化功能,但是我找到了方法沒有返回的原因就像我在下面的答案中詳細說明的那樣。 – KalenGi 2009-12-24 22:37:15

1

我能使用拆分獲得此功能。如果您的班級中有多個下劃線,您可能需要調整索引

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

不錯,但是你應該刪除n = 0和++ n,因爲它不再被使用。 – 2013-04-25 14:58:56

0

此帖子非常有幫助。如果你正在尋找額外的幫助,這是我如何工作(使用haml-rails)。使用toArray函數稍有不同。如果使用'序列化」,你就必須設置屬性,再次爲「數據項=「數據項_#{ID}」。

謝謝你,上網,會知道這麼多的編程解決方案。

: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