你可以通过将项目拖动到嵌套的sortables来解释这种奇怪的行为吗?

时间:2011-01-04 17:26:39

标签: javascript jquery jquery-ui drag-and-drop jquery-ui-sortable

我有以下设置:

  • 一个可排序列表,其中一个<li>的表格中包含每个单元格中的列表。
  • 所有列表都可以互相排序。
  • 可添加到任何可排序项的可拖动项目

问题:将可拖动项目('拖动1','拖动2','拖动3')添加到水平列表(列表表)中的一个列表时,它会在删除时复制可拖动项。有时它会在同一个列表中创建两个副本,或者在项目列表中创建一个副本,在列列表中创建一个副本。

以下是演示:http://jsfiddle.net/MQTgA/

问题:如何在删除可拖动时阻止创建第二个项目?

UPDATE :将水平列表的类名更改为其他内容('hlist')并从'connectToSortable'选项('ul.hlist')中省略新的类名称,不再删除两个副本,仍然允许将项目放入任何列表中。这似乎不对。此外,当尝试将项目放入水平列表而不是主列表时,它似乎也非常敏感(不会带来良好的用户体验)。想法?

更新了演示:http://jsfiddle.net/MQTgA/3/

2 个答案:

答案 0 :(得分:0)

这样做是因为您的顶级无序列表(具有项目1 - X的列表)具有与表无序列表相同的类。如果您将顶级更改为其他类名,则应停止双重拖动。我希望我能正确理解你的问题,这是我的改变。 New code


编辑:实际上,这也无济于事,因为那时你将无法进入你的上层名单。我认为问题在于,当你拖放时,jquery不知道你真正想要进入哪个ul。您可以尝试将所有元素放大一点,这样用户就不必将可拖动的元素精确到正确的位置。

答案 1 :(得分:0)

通过更多的实验,我发现最好的方法是让水平列表不是主列表的一部分。这样,当项目被放置到它们上时不会创建双项,并且在移动项目时没有触感。

以下是我的目标演示:

http://jsfiddle.net/MQTgA/5/