Когда я создаю перетаскиваемый клон и бросаю его в перетаскиваемый объект, я не могу перетащить его снова

Когда я создаю перетаскиваемый клон и бросаю его в перетаскиваемый объект, я не могу перетащить его снова. Как мне это сделать? Во-вторых, я могу только понять, как нам .append добавить клон в dropable. Но затем он привязывается к верхнему левому углу после любого существующего элемента, а не к месту перетаскивания.

$(document).ready(function() {
    $("#container").droppable({
        drop: function(event, ui) {
            $(this).append($(ui.draggable).clone());
        }
    });
    $(".product").draggable({
        helper: 'clone'
    });
});
</script>

<div id="container">
</div>
<div id="products">
    <img id="productid_1" src="images/pic1.jpg" class="product" alt="" title="" />
    <img id="productid_2" src="images/pic2.jpg" class="product" alt="" title="" />
    <img id="productid_3" src="images/pic3.jpg" class="product" alt="" title="" />
</div>

person Cudos    schedule 15.05.2009    source источник


Ответы (4)


Один из способов сделать это:

$(document).ready(function() {
    $("#container").droppable({
        accept: '.product',
        drop: function(event, ui) {
            $(this).append($("ui.draggable").clone());
            $("#container .product").addClass("item");
            $(".item").removeClass("ui-draggable product");
            $(".item").draggable({
                containment: 'parent',
                grid: [150,150]
            });
        }
    });
    $(".product").draggable({
        helper: 'clone'
    });
});

Но я не уверен, что это хороший и чистый код.

person Cudos    schedule 15.05.2009
comment
Немного поздно на вечеринку, но это $(this).append($("ui.draggable").clone());, должно быть $(this).append($(ui.draggable).clone());? (без кавычек), поскольку вы загружаете объект из параметра обратного вызова? - person Barry Chapman; 17.03.2019

Я нашел этот вопрос через гугл. Я также не мог удержать позиции от привязки к контейнеру, пока я не изменил ui.draggable на ui.helper при добавлении:

$(this).append($(ui.helper).clone());
person Bob Nadler    schedule 31.08.2009

Для тех, кто пытается переставить упавший предмет. Взгляните сюда.

перетаскивание и клонирование JQuery.

На самом деле мне пришлось использовать код, который выглядит как

$(item).css('position', 'absolute');
$(item).css('top', ui.position.top - $(this).position().top);
$(item).css('left', ui.position.left - $(this).position().left);

to do it.

person rado    schedule 02.03.2010

Вот мое решение, оно позволяет перетаскивать клон, а затем при необходимости заменять его другим перетаскиванием. Он также имеет параметр функции обратного вызова, который возвращает отброшенный объект div, чтобы вы могли что-то сделать с выбранным div jquery после удаления.

refreshDragDrop = function(dragClassName,dropDivId, callback) {
  $( "." + dragClassName ).draggable({
    connectToSortable: "#" + dropDivId,
    helper: "clone",
    revert: "invalid"
  });
  $("#" + dropDivId).droppable({
    accept: '.' + dragClassName,
    drop: function (event, ui) {
      var $this = $(this),
        maxItemsCount = 1;
      if ($this.children('div').length == maxItemsCount ){
        //too many item,just replace
        $(this).html($(ui.draggable).clone());
        //ui.sender.draggable('cancel');
      } else {
        $(this).append($(ui.draggable).clone());
      }
      if (typeof callback == "function") callback($this.children('div'));
    }
  });
}
person Damon Hogan    schedule 28.01.2016