jQuery.repeater 不适用于 jQuery Ui 可排序
jQuery.repeater doesn't work with jQuery Ui sortable
我正在使用 jQuery.repater library for creating repeateble form. And i want sortable all repeateable fields with 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);
}
});
});
这个等了很久的问题我已经解决了如下:
我在 每次可排序操作时调用 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.repater library for creating repeateble form. And i want sortable all repeateable fields with 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);
}
});
});
这个等了很久的问题我已经解决了如下:
我在 每次可排序操作时调用 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 找到工作示例。
它应该不会破坏任何东西,但我还没有做任何详尽的测试。