2013-01-07 12 views
9

अभी मेरे पास तत्वों का एक स्तंभ है और मेरे पास यह उस बिंदु पर है जहां मैं खींचता हूं, यह क्लोन होता है लेकिन जब मैं ड्रॉप करता हूं, तो यह मूल को भी हटा देता है।jQuery UI सॉर्ट करने योग्य: क्लोन को ले जाएं लेकिन मूल रखें

$(".column").sortable({ 
     helper: 'clone', 
     connectWith: ".column", 
     connectWith: ".grid", 
     start: function(e, ui){ 
      ui.placeholder.height(ui.item.height()); 
      $(".column").find('.portlet:hidden').show() 
      console.log('started') 
     }, 
     stop: function(event, ui) { 
      $(ui.helper).clone(true).removeClass('box ui-draggable ui-draggable-dragging').addClass('box-clone').appendTo('body'); 
     } 
    }); 

मैं कैसे मूल रख सकते जहां इसकी पर और इच्छित स्थान पर क्लोन कदम है (यह स्तंभ के लिए फिर से जोड़कर बिना)?

+1

'क्लोन()' का उपयोग करते समय अमान्य HTML (डुप्लिकेट आईडी) उत्पन्न करने से सावधान रहें। – jbabey

+1

[यह सवाल] (http://stackoverflow.com/questions/6940390/how-do-i-duplicate-item-when-using-jquery-sortable) बहुत समान है और इसका एक अच्छा जवाब है - शीर्ष पर देखें एक स्वीकृत, स्वीकार्य नहीं। – Coderer

उत्तर

12

स्टॉप इवेंट हैंडलर के अंदर $(this).sortable('cancel') का उपयोग आइटम को वापस अपनी मूल सूची/स्थिति में वापस करने के लिए करें। http://api.jqueryui.com/sortable/#method-cancel

$(".column").sortable({ 
     helper: 'clone', 
     connectWith: ".column", 
     connectWith: ".grid", 
     start: function(e, ui){ 
      ui.placeholder.height(ui.item.height()); 
      $(".column").find('.portlet:hidden').show() 
      console.log('started') 
     }, 
     stop: function(event, ui) { 
      $(ui.helper).clone(true).removeClass('box ui-draggable ui-draggable-dragging').addClass('box-clone').appendTo('body'); 
      $(this).sortable('cancel'); 
     } 
    }); 

अद्यतन:

की तरह स्थान आइटम छोड़ने गया था में दूसरी सूची तत्व संलग्न करने के लिए, कुछ निम्न करें:

stop: function(event, ui) { 
      var toListID = ui.item.parent().attr('id'); 
      var idx = $('#' + toListID).children().index($(ui.item[0])); 
      if(idx== -1)return; 
      var elm = $(ui.item[0]).clone(true).removeClass('box ui-draggable ui-draggable-dragging').addClass('box-clone'); 
      $('#' + toListID).children(':eq('+idx+')').after(elm); 
      $(this).sortable('cancel'); 
     } 

के लिए देखें fiddle पूर्ण डेमो

+0

ऐसा लगता है कि क्लोन तत्व को रद्द कर दें। जब मैं ड्रॉप करता हूं, तो ड्रॉप स्थान में कुछ भी नहीं जाता है। –

+0

@ डेलबॉड मेरे लिए काम करता है: http://jsfiddle.net/adamb/tZSN7/11/ – adamb

+0

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

1

यह अन्य है प्रचार:

sort: function(e, ui) { 
    $(ui.placeholder).html($(ui.item).html()); 
    $(ui.placeholder).addClass($(ui.item).attr('class')); 
}, 
संबंधित मुद्दे