处理一个使用 scriptaculous 并遇到问题的旧项目。我目前有一个如下的树结构:
Item 1
+ Item 1a
+ Item 1aa
+ Item 1ab
+ Item 1b
Item 2
+ Item 2a
+ Item 2b
+ Item 2ba
+ Item 2bb
通过我现在使用树选项进行排序设置的方式,用户可以将Item 2bb拖到我试图阻止的Item 2a中。我想将拖动的项目保留在其父类别中。因此,如果Item 2ba存在于Item 2b下,则用户应该无法将该项目拖到该父项之外。我使用的创建代码非常简单:
Sortable.create('cats', {tree:true,scroll:window,treeTag:'ul',tag:'li', onChange:function(){$('save-cats').style.visibility='visible';}});
并且结构由标准<li>
标签组成(注意嵌套<ul>
标签:
<ul>
<li>Item 1</li>
<li>
Item 2
<ul>
<li>Item 2a</li>
</ul>
</li>
</ul>
这甚至可以通过scriptaculous实现,还是我必须升级到其他东西?
我忘了提到这是一个动态列表。我不知道遏制选项是否是我正在寻找的,但这似乎不可能,因为我没有唯一的 ID。
更新
这有帮助,我一直在玩弄以下代码:
new Draggable('cats',{revert:true});
Droppables.add('cats', {
onDrop: function(element)
{
return false;
}});
cat 是主要 ul 元素的 ID。onDrop 正在触发,但我无法让它恢复或“不接受”该项目。我假设如果我能做到这一点,我可以将当前父级与新父级进行比较,如果它们不相同,则将元素推回。