可以对动态内容进行排序

时间:2017-10-26 10:08:05

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

因此,我使用jQuery UI可排序插件对小图库中的照片进行排序。

$(function() {
  $("#area").sortable({
    items: '.sort-wrapper',
    cursor: "move",
    handle: ".photo-handler",
    opacity: 0.5,
    scroll: true,
    scrollSensitivity: 100,
    scrollSpeed: 5,
    revert: 100,
    tolerance: "pointer",
    update : function () {
      var order = $('#area').sortable('serialize');
      $.ajax({
      type : 'POST',
      url : '/file.php',
      data : order
    });
  }
}).disableSelection();

在同一页面上,我动态添加和删除照片。 PHP脚本返回带有div的HTML代码,带有图像链接和按钮"删除"和"移动" (可排序的处理程序)。

示例:

<div class="sort-wrapper">
  <a href="photo001.jpg"><img src="photo001m.jpg" alt=""></a>
  <button type="button" class="remove-this-photo">Remove</button>
  <button type="button" class="photo-handler">Move</button>
</div>

当我添加新文件或从#area删除文件时,问题是可排序停止工作。我一直在寻找解决方案,找到了sortable('refresh')方法,但它并不适用于我。

#area中添加新照片的脚本非常标准。我使用$.ajax({}).done.fail.always方法。 我在开始上传新文件时设法使用sortable('destroy')方法,并在上传完成后执行类似的操作:

.always(function() {
  $("#area").sortable();
});

上面的代码使#area再次排序,但我必须再次复制所有设置以按照我的方式进行配置。 如何绑定sortable以使其在加载动态内容后工作,或者如何在sortable()之外存储所有设置并能够在同一页面上再次使用它?

1 个答案:

答案 0 :(得分:1)

如果向可排序元素添加新内容,则需要刷新初始化实例。为此,请拨打refresh option,如下所示:

.always(function() {
  $("#area").sortable('refresh');
});