【问题标题】:Pre-existing Items not Sortable when Connected to Draggable连接到 Draggable 时,现有项目不可排序
【发布时间】:2014-07-21 14:56:05
【问题描述】:

我有一个设置页面,用户可以在其中将项目从单个列表拖到其他三个列表中的任何一个中,以在他们的网站上构建内容块。单个列表是 jQuery Draggable,其他三个列表是 Sortables。基本上是这样的。

<div class="sourceItems">
    <div class="item">Item 1</div>
    <div class="item">Item 2</div>
</div>

<div class="destination"></div>
<div class="destination"></div>
<div class="destination"></div>

这是 jQuery。

(function ($) {
  $(document).ready(function () {
    $("div.destination").sortable({
      revert: true,
      update: function (event, ui) {
        // Some code to prevent duplicates
      }
    });
    $("div.sourceItems").draggable({
      connectToSortable: '.destination',
      cursor: 'pointer',
      helper: 'clone',
      revert: 'invalid'
    });
  });
})(jQuery);

问题是,当用户返回编辑其设置时,我必须将先前保存的项目加载到三个可排序列表中。页面加载时已经在 Sortable 中的那些项目实际上是不可排序的。只有从 Draggable 拖动的项目是可排序的。如何使预先存在的项目也可排序?

【问题讨论】:

  • 试试吧。制作一个容器 div 并对其应用可排序。

标签: jquery jquery-ui draggable jquery-ui-sortable


【解决方案1】:

如果您将它们设为列表或 div,它会起作用。我刚刚以下面的lis 为例。

演示:http://jsfiddle.net/robschmuecker/LMGg8/

HTML:

<div>Draggable source items
    <ul>
        <li class="draggable" class="ui-state-highlight">Drag me down</li>
    </ul>
</div>
<div>Sortable List 1
    <ul class="sortableList">
        <li class="ui-state-default">Item 1</li>
        <li class="ui-state-default">Item 2</li>
        <li class="ui-state-default">Item 3</li>
        <li class="ui-state-default">Item 4</li>
        <li class="ui-state-default">Item 5</li>
    </ul>
</div>
<div>Sortable List 2
    <ul class="sortableList">
        <li class="ui-state-default">Item 1</li>
        <li class="ui-state-default">Item 2</li>
        <li class="ui-state-default">Item 3</li>
        <li class="ui-state-default">Item 4</li>
        <li class="ui-state-default">Item 5</li>
    </ul>
</div>
<div>Sortable List 3
    <ul class="sortableList">
        <li class="ui-state-default">Item 1</li>
        <li class="ui-state-default">Item 2</li>
        <li class="ui-state-default">Item 3</li>
        <li class="ui-state-default">Item 4</li>
        <li class="ui-state-default">Item 5</li>
    </ul>
</div>

JS

$(document).ready(function () {
    $(".sortableList").sortable({
        revert: true,
        /*update: function (event, ui) {
            // Some code to prevent duplicates
        }*/
    });
    $(".draggable").draggable({
        connectToSortable: '.sortableList',
        cursor: 'pointer',
        helper: 'clone',
        revert: 'invalid'
    });
});

【讨论】:

  • 罗布,感谢您的回复。事实证明,重要的不是格式(即 div 与列表),因为我将您的列表项更改为 div 并且它仍然有效。但是,您所做的是帮助向我证明这不是“可拖动连接到可排序”问题,因此您解放了我的思想。真正的问题是,当我将保存的项目加载回 sortable 时,我给它们的类与我给原始可拖动对象的类相同。所以,它们变成了可拖动的 inside sortable 并且没有像我预期的那样运行。
  • 我很高兴!我已经更改了答案的第一行以反映这一点!
猜你喜欢
  • 1970-01-01
  • 2010-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
  • 1970-01-01
相关资源
最近更新 更多