jQuery.repeater 不适用于可排序的 jQuery Ui

Posted

技术标签:

【中文标题】jQuery.repeater 不适用于可排序的 jQuery Ui【英文标题】:jQuery.repeater doesn't work with jQuery Ui sortable 【发布时间】:2021-05-07 14:11:21 【问题描述】:

我正在使用jQuery.repater 库来创建可重复的表单。我希望使用jQuery Ui Sortable 库对所有可重复的字段进行排序。

一切正常,但是当我对可重复字段进行排序时,输入名称顺序不会重新索引。如here 所述,ready 事件是可能的。

这是我的代码:

<form class="repeater">
    <div class="sortable" data-repeater-list="group-a">
      <div class="item" data-repeater-item>
        <input type="text" name="text-input" value="A"/>
        <input data-repeater-delete type="button" value="Delete"/>
      </div>
      <div class="item" data-repeater-item>
        <input type="text" name="text-input" value="B"/>
        <input data-repeater-delete type="button" value="Delete"/>
      </div>
    </div>
    <input data-repeater-create type="button" value="Add"/>
</form>

JS:

$(document).ready(function() 
  const form = $(".repeater");
  const sortable = $(".sortable").sortable(
    update: function() 
      console.log(form.serializeArray());
    
  );

  $(".repeater").repeater(
    show: function() 
      $(this).slideDown();
    ,
    hide: function(deleteElement) 
      if (confirm("Are you sure you want to delete this element?")) 
        $(this).slideUp(deleteElement);
      
    ,
    ready: function(setIndexes) 
      sortable.on("sortchange", setIndexes);
    
  );
);

并且生活: https://stackblitz.com/edit/js-pbdssq?file=index.js

【问题讨论】:

【参考方案1】:

我已经解决了这个我一直在等待答案的问题如下:

我在每个可排序的操作中都调用了repeater.repeater("setIndexes") 中继器。 Reference

update: function() 
  myRepeater.repeater("setIndexes");

这样可以正常工作,但是点击Add Button会导致添加多个元素的问题,所以需要修改jquery.repeater.js的源代码。 Reference

jquery.repeater.js 中,我们必须进行以下更改:

之前:

$filterNested($self.find('[data-repeater-create]'), fig.repeaters).click(function () 
    addItem();
);

之后:

$filterNested($self.find('[data-repeater-create]'), fig.repeaters).click(function (event) 
    addItem();
    event.stopImmediatePropagation();   
);

您可以在 this link 找到工作示例。

它应该不会破坏任何东西,但我没有做过任何详尽的测试。

【讨论】:

谢谢。这是一个很好的解决方案。

以上是关于jQuery.repeater 不适用于可排序的 jQuery Ui的主要内容,如果未能解决你的问题,请参考以下文章

为啥排序不适用于矢量?

jQuery 可滚动、可排序、可过滤的表格

为啥这种方法不适用于通过反应可视化快速排序?

排序不适用于我的热图

查找功能不适用于未排序的列表

MongoTemplate 排序不适用于 LocalDateTime