2011-04-07 21 views
7

प्राप्त करने से पहले अद्यतन फ़ंक्शन को अक्षम करें मैं एक सूची को संसाधित करने के लिए jquery ui का उपयोग कर रहा हूं जिसमें आप क्रमबद्ध कर सकते हैं और फिर किसी अन्य सूची के बीच सॉर्ट कर सकते हैं। मैं सॉर्टिंग के लिए अद्यतन का उपयोग कर रहा हूं और यह ठीक काम करता है। जब मैं बीच में सॉर्ट करता हूं तो मैं केवल फ़ंक्शन प्राप्त करना चाहता हूं, न कि अद्यतन। वर्तमान में, अद्यतन बुलाया जाता है और फिर प्राप्त किया जाता है। सूचियों के बीच सॉर्ट करते समय अद्यतन कॉल को छोड़ने का कोई तरीका है?JQuery UI सॉर्ट करने योग्य

<script> 
      $ = jQuery 
      $(function() { 
       $("#sortable1).sortable({ 
        connectWith: ".connectedSortable", 
        placeholder: "ui-state-highlight", 
        update: function(event, ui) {processSortWithin(ui.item.attr("id"), ui.item.index()); }, 
        receive: function(event, ui){ 
         processSortBetween(ui.item.attr("id"), ui.item.index(),ui.sender.attr("id")); 
        } 
       }).disableSelection(); 
      }); 

     </script> 
+0

यह बिल्कुल ठीक नहीं है कि आप क्या पूछ रहे हैं, लेकिन आप इसके बजाय स्टॉप का उपयोग करने पर विचार कर सकते हैं। अधिक जानकारी के लिए यह SO प्रश्न देखें और किस क्रम में सटीक घटनाओं के बारे में स्पष्टीकरण के लिए एक बहुत अच्छा लिंक है: http://stackoverflow.com/questions/963822/jquery-sortable-events-being-called-too-any- बार। – Ennael

उत्तर

12

उत्तर से: http://forum.jquery.com/topic/sortables-update-callback-and-connectwith

update: function(e,ui) { 
    if (this === ui.item.parent()[0]) { 
     //your code here 
    } 
} 
+2

यह सूची में सॉर्टिंग और सूची से तत्व को हटाने के बीच अंतर करेगा लेकिन सूची में सॉर्टिंग और किसी अन्य सूची से आइटम प्राप्त करने के बीच अंतर नहीं करेगा। ऐसा करने के लिए आपको इस उत्तर के संयोजन और @ मार्कएन के उत्तर की आवश्यकता है, 'अगर (! Ui.sender && this === ui.item.parent() [0]) {/ * सूची के भीतर क्रमबद्ध करें ... * /} ' – pgraham

+0

यह काम करता है, किसी कारण से ui.sender विशेषता हमेशा उस मामले में शून्य होती है जहां दो लिंक्ड सूचियां होती हैं और एक रिसीव, हटाएं और ईवेंट रोकें। जाओ पता लगाओ। –

4

मैं आज एक ऐसी ही समस्या थी, और एकमात्र समाधान मैंने पाया एक झंडा चर कि अद्यतन घटना के दौरान सेट किया गया है लागू करने के लिए था, और रोक घटना के दौरान जाँच की।

अपने उदाहरण में, आप का उपयोग घटना है जो सूची है कि कुछ अन्य सूची से नए तत्व प्राप्त करता है पर सक्रिय किए जाएंगे प्राप्त करते हैं, तो यह $(".connectedSortable").sortable() विकल्पों के अंदर स्थापित किया जाना चाहिए।

$(function() { 
    position_updated = false; //helper flag for sortable below 

    $(".sortable").sortable({ 
     connectWith: ".sortable", 
     update: function(event, ui) { 
      position_updated = !ui.sender; //if no sender, set sortWithin flag to true 
     }, 
     stop: function(event, ui) { 
      if (position_updated) { 
       processSortWithin(ui.item.attr("id"), ui.item.index()); 
       position_updated = false; 
      } 
     }, 
     receive: function(event, ui) { 
      processSortBetween(ui.item.attr("id"), ui.item.index(),ui.sender.attr("id")); 
     } 
    }).disableSelection(); 
}); 

function processSortWithin(id, position) { 
    alert("sort within"); 
} 

function processSortBetween(id, position, sender_id) { 
    alert("sort between"); 
} 

कार्य उदाहरण:

यहाँ ( प्राप्त दो सूचियों के बीच, में संसाधित) क्या सॉर्ट करने के लिए भेद करने के लिए अपने रास्ते (एक सूची के भीतर, में संसाधित बंद) या स्थानांतरित करने के लिए है http://jsfiddle.net/myLff/2/

3

इसे आज़माएं:

update: function(e,ui) { 
    if (!ui.sender) { 
     //your code here 
    } 
} 
संबंधित मुद्दे