2013-01-07 13 views
9

In questo momento ho una colonna di elementi e l'ho al punto in cui dove trascino, clona ma quando cado, rimuove anche l'originale.jQuery UI ordinabile: spostare clone ma mantenere originale

$(".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'); 
     } 
    }); 

Come posso mantenere l'originale dove la sua struttura (senza ri-aggiungendo alla colonna) e hanno la mossa clone nella posizione desiderata?

+1

Attenzione a generare HTML non valido (ID duplicati) quando si utilizza 'clone()'. – jbabey

+1

[Questa domanda] (http://stackoverflow.com/questions/6940390/how-do-i-duplicate-item-when-using-jquery-sortable) è molto simile e ha una grande risposta - guarda in alto - votato uno, non accettato. – Coderer

risposta

12

Utilizzare $(this).sortable('cancel') all'interno del gestore eventi di arresto per ripristinare l'elemento nella sua lista/posizione originale. 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'); 
     } 
    }); 

UPDATE:

per aggiungere l'elemento al secondo elenco nella posizione della voce era caduta, fare qualcosa come il seguente:

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'); 
     } 

Vedi fiddle per demo completa

+0

Sembra così annullare l'elemento clonato. Quando cado, nulla va nella posizione di rilascio. –

+0

@delboud Funziona per me: http://jsfiddle.net/adamb/tZSN7/11/ – adamb

+0

Vedo cosa stai pensando ora, ho provato prima questa soluzione per aggiungerla ma deve essere nella posizione della caduta effettiva . Non solo aggiunto al fondo. Qualche idea su come evitare l'aggiunta? –

1

Questo è un altro proach:

sort: function(e, ui) { 
    $(ui.placeholder).html($(ui.item).html()); 
    $(ui.placeholder).addClass($(ui.item).attr('class')); 
}, 
Problemi correlati