【问题标题】:How to append draggable into new droppable area?如何将可拖动附加到新的可放置区域?
【发布时间】:2016-08-26 00:49:28
【问题描述】:

我有 3 个不同的 jQuery droppables。

$(".pages").droppable({
        accept: ".draggable"
});

<div id="droppable1" class="droppable" style="height: 300px; width: 300px;"></div>
<div id="droppable2" class="droppable" style="height: 300px; width: 300px;"></div>
<div id="droppable3" class="droppable" style="height: 300px; width: 300px;"></div>

我有一个 jQuery 可拖动对象,我正在使用克隆对象

 $(".draggable").draggable({
        helper:'clone'
    });

<div id="draggable" class="drag-box ui-widget-content">
    <p>Drag Me</p>
  </div>

如果我将我的可拖动对象移动到可放置对象 1 中,我需要能够附加/附加它在可放置对象 1 中创建的克隆,以便读取..

<div id="droppable1" class="droppable" style="height: 300px; width: 300px;">
<div id="draggable" class="drag-box ui-widget-content">
    <p>Drag Me</p>
  </div>
</div>

但是,如果我要将它从 droppable1 包含区域移动到 droppable2 中,那么它会将其移动到 droppable2 下,当然不会实际删除元素,读起来就像...

<div id="droppable1" class="droppable" style="height: 300px; width: 300px;">
</div>

<div id="droppable2" class="droppable" style="height: 300px; width: 300px;">
<div id="draggable" class="drag-box ui-widget-content">
    <p>Drag Me</p>
  </div>
</div>

【问题讨论】:

    标签: jquery jquery-ui


    【解决方案1】:

    这是一个例子,我希望它是你想要的。

    如果您想检查(一旦丢弃)元素是否完全放入容器中,您可以使用我在this question 的回答。注意droppable 元素是this(在drop 回调函数中)

    function setDraggable(el, doClone) {
      el.draggable({
        helper: doClone ? 'clone' : 'original',
        revert: true
      });
    }
    $(".droppable").droppable({
      accept: ".draggable",
      drop: function( event, ui ) {
        cloned = ui.helper.clone().css({'position': '', 'top': '', 'left': ''});
        setDraggable(cloned, false)
        
        $( this )
        .addClass( "ui-state-highlight" )
        .append(cloned)
        ui.helper.hide();
      }
    });
    setDraggable($(".draggable"), true);
    .droppable {
      border: 1px solid red;
      float: left;
      margin-left: 10px;
    }
    
    .draggable {
      border: 1px solid green;
      padding: 5px;
      margin: 0;
    }
    .draggable p {
      margin: 0;
      padding: 0;
    }
    <link rel="stylesheet" href="//code.jquery.com/ui/1.12.0/themes/base/jquery-ui.css">
    <script src="//code.jquery.com/jquery-1.12.4.js"></script>
    <script src="//code.jquery.com/ui/1.12.0/jquery-ui.js"></script>
    
    
    <div id="droppable1" class="droppable" style="height: 150px; width: 150px;"></div>
    <div id="droppable2" class="droppable" style="height: 150px; width: 150px;"></div>
    <div id="droppable3" class="droppable" style="height: 150px; width: 150px;"></div>
    
    <br style="clear: both" />
    <br />
    
    <div class="draggable">
      <p>Drag Me</p>
    </div>

    在示例中,我只隐藏了原始拖动的元素如果你想将它从 DOM 树中完全删除,你可以将 ui.helper.hide(); 更改为 ui.helper.remove();

    【讨论】:

    • 我希望能够将项目从 1 个可放置区域拖到下一个区域。所以一旦我在第一个盒子上“拖动我”,我应该能够将它从第一个盒子移动到它右边的盒子,反之亦然。
    • 非常感谢您在这方面的帮助。我不知道该怎么做的最后一件事是当它移动时(如原始帖子中所述),它实际上会显示在它被移动到的
      下。例如,如果我现在将它拖到第三个框。在 HTML 中,它现在列在
      中,但是如果我将它移动到 dropple2,它在检查时仍然列在 droppable3 中。希望这是有道理的。
    • 只需使用ui.helper.remove(); 而不是ui.helper.hide();
    • 真是个了不起的人!请更新答案,我将标记为已接受。你不知道我自己花了多少时间研究和尝试这个。我不知道你在 draggable 下所做的一些部分。显然我需要阅读更多内容。非常感谢!
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签