2016-04-11 239 views
0

我試圖使用jQuery的可拖動和可拖拽。jQuery:多個可拖動和可拖放?

我在我的頁面上有多個可拖放和多個可拖放對象。

drga和drop的工作正常,但問題是,當我拖放div到1 droppable,它會克隆在我的網頁上的其他droppables以及...當我移動拖動內可以放棄,他們再次成倍增長。

要解釋這個問題,我已經創造了這個FIDDLE

,這是我的全部代碼:

(function ($) { 
    $.fn.liveDraggable = function (opts) { 
     this.live("mouseover", function() { 
     if (!$(this).data("init")) { 
      $(this).data("init", true).draggable(opts); 
     } 
     }); 
     return this; 
    }; 
}(jQuery)); 
$('.drag').liveDraggable({ 
    helper: 'clone', 
     cursor: 'move' 


     }); 


var x = null; 
$(".droppable").droppable({ 
    drop: function(e, ui) { 
    var parent = $(".droppable"); 
    var x = ui.helper.clone(); 
    var img = $(x) 

    var leftAdj = (ui.position.left - parent.offset().left); 
    var topAdj = (ui.position.top - parent.offset().top); 


    if (x.hasClass("outside")) { 
     x.css({ 
     left: leftAdj, 
     top: topAdj 
     }); 
     x.removeClass("outside"); 

    } 

    x.draggable({ 
     helper: 'original' 
    }); 
    x.find('.ui-resizable-handle').remove(); 
    x.resizable(); 
    x.appendTo('.droppable'); 
    ui.helper.remove(); 
    } 
}); 

拖動紅色的div到黑色的div,你應該看到這個問題。

請問有人能就這個問題提出建議嗎?

任何幫助,將不勝感激。

編輯:

親近,但還是不太有:https://jsfiddle.net/qkhunz8k/2/

回答

0

編輯:顯然,我不是溝通非常好。讓我再試一次。您所有的可投入物都有類別droppable。正如你所說,他們當然是。這是班級的目的。

但是,在您的代碼中,當您說x.appendTo('.droppable')時,這是您的重複項的來源。它附加到每個具有droppable類的元素。

我並不是建議你改變或刪除droppable類。我並不是建議你改變你所有的jQuery選擇器。我只是建議,當你做你的.appendTo,也許你應該只將它追加到droppable這是目標。不是所有的人。那有意義嗎?你可以通過做x.appendTo(this)來做到這一點。只需更改該行,並查看重複問題是否消失。

$(".droppable").droppable({ 
... 
     x.appendTo(this); 

這個改變將做的唯一的事情就是改變你的可拖動元素追加到的元素的數量。它不會導致任何其他變化。但我認爲它會解決你原來的問題。

另外,我可能會建議您通過更改其他行來獲得更好的結果嗎?如果您要使用ui.draggable而不是ui.helper,則可能會發現css定位會更易於管理,並且您不需要太多地操縱topleft屬性。只是一個想法。

var x = ui.draggable.clone(); 

更新您的提琴here

+0

的修改 '所有你droppables的上課投擲的。' ..是着,當然他們有。那是什麼課程!抱歉,但你的小提琴仍然不是我想要做的。在你的小提琴中,一旦拖動被拖動一次,它將變得不可拖動。 – rooz

+0

好的,這個想法是,當你這樣做時:'$('。droppable')',表示所有具有該類的元素。所以,如果你附加到該jQuery,它將追加到所有。這就是爲什麼你應該追加到'$(this)'元素。您表達的問題是,當您放棄該元素時,該元素將被追加到多個目標上。這就是發生這種情況的原因。 – David784

+0

我試圖澄清我的答案,解釋一下。我希望現在更清楚一點。另外,當你說「一旦拖動拖動一次,它就會變成不可拖動的」,我不確定你的意思。你是說原始的拖拽不能被拖拽嗎?或附加的克隆?我已經嘗試了Firefox和Chrome,並且能夠拖動原始的可拖動多次。這些克隆似乎僅限於被拖入新的可丟棄容器中,但我不確定這是否是您的意思,並且就此而言,您希望它做什麼。 – David784