2009-12-24 11 views
8

क्या कॉलबैक का उपयोग करने के बजाय सीधे धारावाहिक विधि को कॉल करके jquery में यूएल से आइटम्स की क्रमबद्ध सूची प्राप्त करना संभव है? कोड स्निपेट:Jquery sortable ('serialize')

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

category_links_list_3 यूएल

डोम संरचना की आईडी है:

<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

मैं अंत में इस सवाल का जवाब मिल गया है! आप इस पर serialize विधि कॉल करने से पहले यूएल sortable पहले बनाने की जरूरत है:

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

इस बार linkOrderDatacategory_link [] = 8 & category_link [] = 9

16

serialize कोई रिक्त स्ट्रिंग लौटाता है , सुनिश्चित करें कि आईडी विशेषताओं में अंडरस्कोर शामिल है। वे फ़ॉर्म में होना चाहिए: "set_number" उदाहरण के लिए, आईडी गुणों के साथ एक 3 तत्व सूची foo_1, foo_5, foo_2 foo [] = 1 & foo [] = 5 & foo [] = 2 को क्रमबद्ध करेगा। आप सेट और संख्या को अलग करने के लिए अंडरस्कोर, बराबर चिह्न या हाइफ़न का उपयोग कर सकते हैं। उदाहरण के लिए foo = 1 या foo-1 या foo_1 सभी foo [] = 1 को क्रमबद्ध करें।

एक उदाहरण है। मैंने इसका इस्तेमाल किया। इसीलिए। मैंने तुम्हें 2 देखा।

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

यह आपकी मदद हो migth।

+0

मेरे पास उचित रूप से स्वरूपित आईडी हैं। मैं कॉलबैक विधि का उपयोग कर सकता हूं, लेकिन जैसा कि आप डीओएम संरचना से देख सकते हैं, यूएल दिखाई नहीं दे रहा है और इसलिए घटनाओं को आग नहीं दे सकता। – KalenGi

+0

हाँ, इससे मुझे भी मदद मिली –

3

वर formStr = $ ('# कंटेनर') को क्रमानुसार()

जोड़ा गया:। यही कारण है कि फार्म तत्वों के लिए काम करेंगे। तुम भी तो की तरह अपने खुद के serialize रोल कर सकते हैं:

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

+0

यदि कोई फॉर्म आईडी नहीं है, तो आप अपने स्वयं के फ़ंक्शन को – jspcal

+0

के रूप में रोल कर सकते हैं यह निश्चित रूप से धारावाहिक कार्यक्षमता को दोहराता है। हालांकि, यह कारण है कि विधि वापस नहीं आई थी जैसा कि मैंने नीचे दिए गए उत्तर में विस्तृत किया है, कुछ भी कर रहा हूं। – KalenGi

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 को हटा देना चाहिए क्योंकि अब इसका उपयोग नहीं किया जा रहा है। –

0

इस पोस्ट में काफी मददगार था समायोजित करने की आवश्यकता हो सकती है। यदि आप अतिरिक्त सहायता की तलाश में हैं, तो यहां मैं इसे काम करने के लिए मिला (हैमल-रेल का उपयोग करके)। ToArray फ़ंक्शन का उपयोग थोड़ा अलग है। `Serialize का उपयोग कर डेटा-मद =" डेटा-मद 'आप विशेषता, फिर से स्थापित करने के लिए, के रूप में होता है' _ # {आईडी} '।

इतने सारे प्रोग्रामिंग समाधान जानने के लिए, धन्यवाद, इंटरनेट।

: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 
संबंधित मुद्दे