jquery - jQuery.repeater 不适用于可排序的 jQuery Ui
问题描述
我正在使用jQuery.repater库来创建可重复的表单。我希望使用jQuery Ui 可排序库对所有可重复的字段进行排序。
一切都很好,但是当我对可重复的字段进行排序时,输入名称订单不会重新索引。如此处所述,事件是可能的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);
}
});
});
解决方案
我已经解决了这个我一直在等待答案的问题如下:
在每个可排序的操作中,我都会呼叫repeater.repeater("setIndexes")
中继器。参考
update: function() {
myRepeater.repeater("setIndexes");
}
这使它可以正常工作,但是单击Add Button
会导致添加多个元素的问题,因此需要更改jquery.repeater.js
. 参考
在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();
});
您可以在此链接中找到工作示例。
它不应该破坏任何东西,但我没有做过任何详尽的测试。
推荐阅读
- jquery - 从 jquery $.get fail 错误处理程序获取人工消息
- tomcat - Java 如何配置 JAVA_OPTS 环境变量不显示在日志中
- php - 多个选择框值未插入 codeigniter
- c++ - 通过基类自动化窗口编程
- javascript - 无法在 Safari 的剪贴板中保存格式化数据(文本/html)
- ios - 在 .mm 文件中使用带有回调的 SNMP++ 方法
- javascript - Node Express Handlebars 变量问题
- postgresql - 使用 Postgres ODBC 驱动程序时设置 Applicationname
- excel - 粘贴值和文件名在单元格引用中
- google-chrome-extension - 如何实时将 chrome 的网络选项卡分享给不同的用户?