2013-01-07 29 views
9

Ngay bây giờ tôi có một cột các phần tử và tôi có nó đến điểm mà tôi kéo, nó nhái nhưng khi tôi thả, nó cũng loại bỏ bản gốc.Giao diện người dùng jQuery có thể sắp xếp: Di chuyển bản sao nhưng giữ nguyên

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

Làm cách nào để giữ nguyên bản gốc tại vị trí của nó (không gắn lại vào cột) và sao chép vào vị trí mong muốn?

+1

Hãy coi chừng tạo HTML không hợp lệ (ID trùng lặp) khi sử dụng 'clone()'. – jbabey

+1

[Câu hỏi này] (http://stackoverflow.com/questions/6940390/how-do-i-duplicate-item-when-using-jquery-sortable) là rất giống nhau và có một câu trả lời tuyệt vời - nhìn ở đầu - một cái, không phải cái được chấp nhận. – Coderer

Trả lời

12

Sử dụng $(this).sortable('cancel') bên trong trình xử lý sự kiện dừng để hoàn nguyên mục trở lại danh sách/vị trí ban đầu của nó. 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:

Để thêm các yếu tố để danh sách thứ hai ở vị trí mục này đã được thả, làm điều gì đó như sau:

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

Xem fiddle cho bản trình diễn đầy đủ

+0

Điều này có vẻ như vậy sẽ hủy bỏ phần tử nhân bản. Khi tôi thả, không có gì đi vào vị trí thả. –

+0

@ delboud Làm việc cho tôi: http://jsfiddle.net/adamb/tZSN7/11/ – adamb

+0

Tôi thấy những gì bạn đang suy nghĩ bây giờ, tôi đã thử giải pháp đó trước khi nối thêm nhưng nó cần phải ở vị trí thả thực tế . Không chỉ được thêm vào phía dưới. Bất kỳ ý tưởng nào về cách tránh phụ thêm? –

1

Đây là một proach:

sort: function(e, ui) { 
    $(ui.placeholder).html($(ui.item).html()); 
    $(ui.placeholder).addClass($(ui.item).attr('class')); 
}, 
Các vấn đề liên quan