【问题标题】:multiple selective sortable lists (1 master and 2 subs)多个选择性可排序列表(1 个主列表和 2 个副列表)
【发布时间】:2012-01-24 21:36:51
【问题描述】:

我还没有看到任何选择性排序的示例:

[A:一份主名单]
[B:一个子列表]
[C: 另一个子列表]


条件:

  1. B 和 C 可以转移到 A
  2. A 只能将来自 B 的元素传递给 B(同样适用于 C)
  3. B 和 C 不能相互转移

示例结构:

<ul class="A"></ul>    
<ul class="B">
   <li class="child-B" />
   <li class="child-B" />
   <li class="child-B" />
</ul>
<ul class="C">
   <li class="child-C" />
   <li class="child-C" />
   <li class="child-C" />
</ul>

我尝试将 sortable 应用于列表并尝试在之后动态更改 connectWith(它们都能够连接到 A),但没有运气。这是我的尝试之一 (jsFiddle)。我还尝试将 '.master,.sub' 作为初始 connectWith,但它允许交叉共享。

我认为第二个循环是更新 sortable 的 connectWith,所以我被卡住了。有什么想法吗?

【问题讨论】:

  • 如果有办法在 receive 事件中拒绝项目,那就太好了,但似乎没有内置的方法可以这样做。
  • @James:这不是取消的作用吗?
  • @JeffB 我读到的所有内容都说它在接收中不起作用。猜猜我应该测试它,因为从 Goran 的回答看来,它实际上确实按我想要的方式工作。动画很丑,但很实用。
  • @JamesMontagne 我同意。我阅读了文档并听到了一些相同的内容,也许存在浏览器错误,但到目前为止,Goran 的回答对我有用。这就是为什么我最初尝试执行 connectWith 而不是取消,如果列表不正确,它将永远不会启动。

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


【解决方案1】:

这是我第一次使用sortable(从 jqueryui.com 阅读了一些内容),但我认为这应该可以解决问题。您可以在以下jsFiddle

看到它的实际应用

HTML:

<ul class="master"></ul>

<ul class="sub a">
    <li class="a">Foo</li>
    <li class="a">Boo</li>
</ul>
<ul class="sub b">
    <li class="b">Bar</li>
    <li class="b">Baz</li>
</ul>

JQuery:

$(document).ready(function(){

    // create sortables
    $( ".master,.sub" ).sortable({
       connectWith: ".master,.sub",
       revert: true,
       receive: function(event, ui) {

           // only perform for sub drop downs
           if ($(this).hasClass('sub'))
           {
               // if the item doesn't have the matching sub class
               if (!$(this).hasClass($(ui.item).attr('class')))
               {
                   // cancel the sortable
                   $(ui.sender).sortable('cancel');
               }
           }
       }
    }).disableSelection(); 
});

这个例子基本上是在接收到item时进行验证,如果不通过就取消移动。

希望它是您正在寻找的。​​p>

【讨论】:

  • 那肯定行得通 - 仍然很好奇为什么会有一个用于 connectWith 的设置器,如果它不做任何事情。我想要的另一件事是预先进行验证。似乎动画试图将其放置到位,然后一旦稳定下来,它就决定不应该去那里。它应该在它试图安定下来之前弄清楚它不应该去那里
  • 希望我能告诉你原因,那天早些时候我碰巧读了一点关于 jQuery UI 的内容。根据jQuery UIconnectWith 属性仅适用于可排序对象,而不适用于可排序对象中的单个项目,因此需要某种形式的自定义验证。您可能可以尝试摆弄该链接上列出的其他事件,但receive 是我能找到的最好的。
  • 这是一个很好的发现。通常,我会进入基本代码并检查发生了什么,然后修改、替换或添加插件;但我没有时间 - 所以我很感激额外的眼睛和帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-28
  • 1970-01-01
  • 1970-01-01
  • 2016-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多