When I make a draggable clone and drop it in a droppable I cannot drag it again

后端 未结 4 430
执念已碎
执念已碎 2020-11-28 20:52

When I make a draggable clone and drop it in a droppable I cannot drag it again. How do I do that? Secondly I can only figure out how to us .append to add the c

相关标签:
4条回答
  • 2020-11-28 21:10

    Here is my solution, it allows for dragging and dropping a clone, and then replacing it after as needed by another drag and drop. It also has a callback function parameter which passes back the dropped div object so that you can do something with the jquery selected div once dropped.

    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'));
        }
      });
    }
    
    0 讨论(0)
  • 2020-11-28 21:19

    For those trying to reposition the dropped item. Take a look here.

    Jquery drag /drop and clone.

    I actually had to use code that looks like

    $(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.

    0 讨论(0)
  • 2020-11-28 21:21

    I found this question via Google. I couldn't keep the positions from snapping to the container either, until I changed 'ui.draggable' to 'ui.helper' when appending:

    $(this).append($(ui.helper).clone());
    
    0 讨论(0)
  • 2020-11-28 21:29

    One way to do it is:

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

    But I'm not sure if it is nice and clean coding.

    0 讨论(0)
提交回复
热议问题