2010-04-06 14 views
7

मेरे पास कुछ आइटम सॉर्ट करने के लिए निम्न मार्कअप और जावास्क्रिप्ट है। आइटम को ब्लॉक या अन्य ब्लॉकों में सॉर्ट किया जा सकता है। यह काम करता है लेकिन एक ब्लॉक से दूसरे ब्लॉक में स्थानांतरित होने के बाद मुझे सही ब्लॉक आईडी पुनर्प्राप्त करने में कोई समस्या है।Jquery sortable का उपयोग करके सॉर्ट करने के बाद मूल कंटेनर आईडी कैसे पुनर्प्राप्त करें?

उदाहरण के लिए, अगर मैं "ब्लॉक 1" के भीतर मद 1 ले जाते हैं, मैं "मैं ब्लॉक = block_1 में हूँ" लेकिन अगर मैं ब्लॉक 2 के लिए 1 आइटम के लिए कदम मैं अभी भी मैं ब्लॉक 1 में

हूँ लेकिन मैं ब्लॉक 2 को अपने मूल कंटेनर के रूप में बनाना चाहता हूं। मुझे इस आईडी को पुनः प्राप्त करने की आवश्यकता है ताकि मैं कुछ AJAX कर सकूं और तदनुसार डीबी अपडेट कर सकूं।

क्या आप कृपया इसे सही करने में मेरी सहायता कर सकते हैं ??

<div id="blocks_sortable"> 
    <div id="block_1"> 
     <h2>Block 1</h2> 

     <div class="items_sortable connectedSortable"> 
      <div id="item_1"> 
       <span>Item 1</span></div> 
      <div id="item_2"> 
       <span>Item 2</span></div> 
      <div id="item_3"> 
       <span>Item 3</span></div> 
     </div> 
    </div> 
    <div id="block_2"> 
     <h2>Block 2</h2> 

     <div class="items_sortable connectedSortable"> 
      <div id="item_4"> 
       <span>Item 4</span></div> 
      <div id="item_5"> 
       <span>Item 5</span></div> 
      <div id="item_6"> 
       <span>Item 6</span></div> 
     </div> 
    </div> 
</div> 

<script> 
$("#blocks_sortable").sortable({ }); 
$(".items_sortable").sortable({ 
    connectWith: '.connectedSortable' 
    , forcePlaceholderSize: true 
    ,   stop : function(event, ui){ 
        alert("I am in block = "+$(this).parent().attr("id")); 
       } 
}).disableSelection();  
</script> 

धन्यवाद।

+0

एक और चीज जो आपको अवगत कराई जानी चाहिए वह आम तौर पर किसी घटना से निकालकर एक समारोह में होती है, यह घटना "इस" द्वारा संदर्भित होती है .... तो आप जो भी मांग रहे हैं वह घटना वस्तु का अभिभावक नहीं है तत्व जो स्थानांतरित हो गया है। कम से कम, मुझे विश्वास है कि यह काम करता है ... इस तरह यह वेनिला जेएस में काम करता है (फिर से मुझे वास्तव में jQuery के साथ अनुभव नहीं है इसलिए मुझे नहीं पता कि $ (यह) अलग है या नहीं) – MisterMister

उत्तर

7

मुझे संदेह है कि समस्या यह है कि आप गलत घटना का उपयोग कर रहे हैं। असल में जो मुझे लगता है वह हो रहा है कि स्टॉप इवेंट बहुत जल्दी या गलत वस्तु के लिए फायरिंग हो रहा है।

मैं दस्तावेज़ Here पर पढ़ता हूं और देखता हूं कि आप जो करने की कोशिश कर रहे हैं उसके लिए एक और उचित घटना है या नहीं।

मुझे लगता है कि आप जो चाहते हैं वह "अपडेट" या "निष्क्रिय" घटनाओं जैसा कुछ है।

यदि आप किसी आइटम को "ब्लॉक" से दूसरे स्थान पर ले जाते हैं तो इन दोनों घटनाओं में से प्रत्येक एक बार "ब्लॉक" के लिए आग लग जाएगी। यदि एक ब्लॉक

निष्क्रिय हमेशा सभी ब्लॉकों के लिए सक्रिय कर देगा के भीतर ले जाया

अद्यतन केवल एक बार सक्रिय होगा।

 $(".items_sortable").sortable({ 
      connectWith: '.connectedSortable', 
      forcePlaceholderSize: true, 
      update: function(event, ui){ 
       if(ui.sender){ 
        alert(ui.item.attr("nodeName") + " in block = " + 
        $(this).parent().attr("id")); 
       } 
      } 
     }).disableSelection(); 

पैरेंट आईडी सूचित करेंगे केवल जब एक आइटम एक और ब्लॉक करने के लिए ले जाया जाता है:

अद्यतन आप देख सकते हैं कि घटना ui.sender की जांच करके यह "गैर मूल" ब्लॉक में फायरिंग कर रहा है के साथ

। घटना दोनों ब्लॉक के लिए आग लग जाएगी, लेकिन अलर्ट केवल "गैर-मूल" के लिए दिखाएगा।

"मूल" जो अब एक तत्व याद आ रही है के लिए एक बार

, और एक के लिए:

आप AJAX उपयोग कर रहे हैं एक डीबी मुझे लगता है कि आप क्या चाहते में जानकारी अद्यतन करने के लिए दोनों ब्लॉकों के लिए आग की घटना है "नया" जो अब एक तत्व प्राप्त कर लिया है।

मैं बिल्कुल क्या कर रहा हूं या jQuery UI के बारे में बहुत परिचित नहीं हूं, इसलिए मैं और अधिक विशिष्ट नहीं हो सकता। याद रखें, दस्तावेज़ आपके दोस्त हैं।

उम्मीद है कि इससे मदद मिलती है।

+0

उत्तर मिस्टर के लिए धन्यवाद। बस fyi, इसकी श्रेणियों और उत्पादों की तरह रिश्ते की तरह .. टेबल आइटम में आइटम_आईडी, ब्लॉक_आईडी, नाम, ऑर्डर और ब्लॉक ब्लॉक_आईडी, ब्लॉक_नाम, ब्लॉक_ऑर्डर है। इसलिए उपयोगकर्ता ब्लॉक के भीतर या ब्लॉक में वस्तुओं को ऑर्डर करना चाहते हैं और इन परिवर्तनों को डीबी में सहेजना चाहते हैं। तो यदि कोई आइटम स्थानांतरित हो जाता है, तो मुझे सभी वस्तुओं की आवश्यकता होती है (जिसे मैं आरे, और वर्तमान ब्लॉक का उपयोग कर सकता हूं)। मैं अद्यतन/निष्क्रिय करने पर एक त्वरित रूप से देखता हूं लेकिन फिर से अच्छी तरह से जांचता हूं और आपको बताता हूं। धन्यवाद। – user187580

+0

शुभकामनाएँ। उम्मीद है कि मैं कुछ मदद करने में सक्षम था। – MisterMister

+0

यह बढ़िया है, धन्यवाद! – cawecoy

1

शायद आईडी विशेषता का उपयोग करने के बजाय यह बेहतर है कि आप उनके सूचकांक का उपयोग कर तत्वों की पहचान करते हैं। इसलिए अधिक

alert('I am in block' + $(this).parent().index()); 
+0

नहीं यह नहीं करता काम या मैं नहीं जानता कि इसका सही तरीके से उपयोग कैसे करें। मुझे सूचकांक -1 के रूप में मिलता है। – user187580

0

तरह

आप सुरक्षित खेलते हैं और एक REL विशेषता है जो उचित पैरेंट आईडी के मान का आयोजन करेगा जोड़ सकते हैं। जब आप तत्वों को चारों ओर ले जाते हैं तो आपको आरईएल विशेषता बनाए रखने के लिए कुछ कोड जोड़ना होगा।

संबंधित मुद्दे