【问题标题】:jQuery UI Sortable doesn't refresh after cloning and appending a new sortable list克隆并附加新的可排序列表后,jQuery UI Sortable 不会刷新
【发布时间】:2012-05-03 22:16:39
【问题描述】:

好的,我在这里要做的是让 jQuery UI 在通过克隆将新列动态添加到页面时更新页面上显示的可排序项。如果您克隆一列(演示页面),新列应该能够接收现有列列表中的两个项目以及可以从顶部列表 A 拖到其中一个排序列表中的新项目。这适用于初始设置,但是一旦您克隆并附加新列,事情就会中断;新克隆的列未被识别为可放置目标,我也无法将新项目从列表 A 拖到新克隆的列列表中。

直观地说,sortable('refresh') 命令应该足以让可排序对象检查设置中是否有任何更改,并使新元素能够接收和处理可排序项目。但是,我尝试在单击按钮时执行此操作,但似乎没有效果。

我还尝试再次直截了当地调用 '.columnlist' 选择器上的整个 sortable() 插件,希望它会在新匹配的元素上初始化,并简单地跳过已经具有可排序的元素。

哦,当然我使用 clone(true, true) 来确保事件和数据随之而来。

请在此处查看演示页面:http://labs.shifthappens.nl/dragsort/ 请尝试以下操作:

  1. 将项目从列表 A 拖动到列列表 A 或 B。拖动到可排序的作品
  2. 对列列表 A 中的项目重新排序。可排序的作品。
  3. 单击克隆按钮。出现 C 列的克隆。
  4. 尝试将任何项目(无论是从列表 A 还是从另一个列列表)拖到克隆的列 C 中,然后看:它没有响应。就好像它不存在一样。
  5. 有趣的事情:如果你已经把项目放在原来的C列然后克隆它,克隆列中的项目可以移动到其他列表,但是一旦出去,就不能移动回克隆的列表.好像它拒绝了自己的后代。

如何使克隆的列表也成为可排序和有效的放置区?

【问题讨论】:

  • 是否有理由需要进行深度克隆?我创建了一个没有深度克隆的示例,它似乎可以工作 - jsfiddle.net/jaredhoyt/WRZh4

标签: javascript jquery html jquery-ui jquery-ui-sortable


【解决方案1】:

正如 jaredhoyt 所指出的,这确实是关于深度克隆。显然 jquery ui 不需要深度克隆的元素,如果你这样做并且期望新元素也是可放置的目标,实际上会中断。

但是,我确实发现需要在列上执行另一个 $('selector').sortable() 才能识别克隆列表。这也是 jaredhoyt 在他的小提琴中所做的。这虽然对我来说直观而言,“刷新”方法将是最优雅的解决方案,不是吗?

无论如何,案件已结案。我很高兴它就像不克隆包含数据和事件的列一样简单,只需复制 HTML。

【讨论】:

    猜你喜欢
    • 2014-01-24
    • 2019-06-27
    • 2014-04-28
    • 2019-01-19
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    相关资源
    最近更新 更多