1

处理一个使用 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 正在触发,但我无法让它恢复或“不接受”该项目。我假设如果我能做到这一点,我可以将当​​前父级与新父级进行比较,如果它们不相同,则将元素推回。

4

0 回答 0