2010-01-27 10 views
47

http://jqueryui.com/demos/sortable/#placeholder प्लेसहोल्डर में दिए गए उदाहरण में नारंगी बॉक्स प्रकट होता है कि जब आप किसी भी आइटम को खींचें है।jQuery यूआई sortable: कैसे मैं "प्लेसहोल्डर" वस्तु की उपस्थिति को बदल सकते हैं?

यह तत्व placeholder विकल्प का उपयोग फेरबदल किया जा सकता है - लेकिन यह केवल आप तत्व के वर्ग को यहां बताए गए संशोधित करने देता है: http://jqueryui.com/demos/sortable/#options

मैं और अधिक इस तत्व को अनुकूलित करने, उदा चाहते हैं एक ही तरीके से placeholder विकल्प है कि एक helper विकल्प के लिए एक समारोह की आपूर्ति कर सकते करने के लिए एक समारोह की आपूर्ति करके।

क्या मैं यह करने के लिए बदलने के लिए की आवश्यकता होगी (जैसे में sortable.js)?

उत्तर

86

ui.sortable.js के लिए स्रोत (1.7.2), तो आपको धोखा और एक element समारोह के साथ एक वस्तु और एक update कार्य करने के लिए सेट कर सकते हैं placeholder को देखते हुए। element समारोह (आप अगर आप को देखने के लिए क्या डिफ़ॉल्ट कार्यान्वयन करता चाहते sortable अंदर _createPlaceholder समारोह की जाँच कर सकते हैं) प्लेसहोल्डर डोम वस्तु वापस जाने के लिए प्रयोग किया जाता है और update समारोह आप सही इसके आकार की तरह काम करने के लिए अनुमति देता है।

उदाहरण के लिए, निम्नलिखित सूची आइटम शब्द के साथ परीक्षण के अंदर अपने प्लेसहोल्डर के रूप में पैदा करेगा (ध्यान दें कि यह रिटर्न वास्तविक डोम वस्तु ([0]) और नहीं jQuery वस्तु ही):

$("#sortable").sortable({ 
    placeholder: { 
     element: function(currentItem) { 
      return $("<li><em>test</em></li>")[0]; 
     }, 
     update: function(container, p) { 
      return; 
     } 
    } 
}); 

यदि मैं सही ढंग से स्रोत पढ़ रहा हूं, तो element फ़ंक्शन वर्तमान आइटम (jQuery ऑब्जेक्ट) और this को पारित किया जाना चाहिए sortable स्वयं (यानी $("#sortable") इस उदाहरण में) को इंगित करना चाहिए। update में आपको "कंटेनर" पास किया गया है जो ऑब्जेक्ट है जिसमें सभी विकल्प हैं, & तत्व, आदि & placeholder स्वयं।

कृपया ध्यान दें कि यह एक गैर-दस्तावेजी हैक है, इसलिए यह स्पष्ट रूप से & jQuery यूआई के अगले संस्करण के साथ बदल सकते हैं असमर्थित होगा ... लेकिन यह अभी भी, आप के लिए काम का हो सकता है को देखते हुए आप संपादन के बारे में बात कर रहे थे वैसे भी ui.sortable.js

उम्मीद है कि मदद करता है।

+1

निर्माण पूरी तरह से इस प्रकार है - धन्यवाद !! – brahn

+2

सुंदर; यदि आप खींचने के दौरान आइटम्स के लिए निश्चित ऊंचाई चाहते हैं तो आप क्रमबद्ध काम करना चाहते हैं (उदाहरण के लिए, विशाल वस्तुओं के कारण), आप (ऊपर दिए गए अपडेट फ़ंक्शन में) का उपयोग कर सकते हैं: 'container.refreshPositions(); 'और वह फ़िक्स सब कुछ। Whoohoo! – kamranicus

+5

मैं ड्रैगगेबल आइकनों को लागू करने के लिए अब इस हैक का उपयोग कर रहा हूं जो लिंक किए गए सॉर्ट करने योग्य पर खींचने पर डीओएम तत्व के रूप में प्रदर्शित होते हैं! स्रोत पढ़ने के लिए अतिरिक्त कुडोस; मैंने कोशिश की और अब मुझे मेड की जरूरत है। – Altreus

52

मुझे मिला एक और हैकिश दृष्टिकोण: कोई प्लेसहोल्डर तत्व को संशोधित करने के लिए start विकल्प का उपयोग कर सकता है, उदा।

$("#sortable").sortable({ 
    start: function (e, ui) { 
     // modify ui.placeholder however you like 
     ui.placeholder.html("I'm modifying the placeholder element!"); 
    } 
}); 
+0

मुझे नहीं पता कि कुछ बदल गया है, लेकिन यह मेरे लिए काम करता है जबकि अल्कोन्जा ने नहीं किया। –

+0

यह मेरे लिए 1.8.6 के साथ काम किया, Alconja के sln –

+12

कोशिश नहीं की मुझे नहीं लगता कि यह बिल्कुल हैकिश है; आधिकारिक दस्तावेज़ीकरण (http://jqueryui.com/demos/sortable/) ओवरव्यू अनुभाग में 'ui.placeholder' दिखाता है और ईवेंट अनुभाग में 'स्टार्ट' कॉलबैक दिखाता है। मैं कहूंगा कि यह करने का आधिकारिक रूप से समर्थित तरीका है। –

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