我有一个 jQuery 脚本,可以克隆可排序的输入字段行。该脚本是可配置的,您可以在开头 (insertBefore) 或末尾 (insertAfter) 插入新的克隆行。最后插入新的克隆没有问题,并且可以按预期工作。但是在开头插入会带来编号排序的问题。
两个例子:
假设您在数据库中保存了 4 行。当您克隆最后一行并将其插入到第一行之前时,该数字会增加到 5。但是此后的每个克隆仍然克隆到 5,因为第 4 行仍在使用中。
将其切换到克隆第一行并将其插入到第一行之前的位置...递增从 2、3 等开始,最终将在保存时替换先前保存的行。
有什么想法可以让 insertBefore 正确递增吗?每次触发克隆点击事件时,是否可以重新排序所有行?我不确定哪种类型的解决方案可以在这里工作。
这是我为此使用的代码:
$('.add-row').on('click', function(event) {
function incrementProp(index, prop) {
return prop.replace(/(\d+)/, function(fullMatch, n) {
return Number(n) + 1;
});
}
var clone_row,
insert_location,
clone_var = $(this).parents('.sortable');
if (clone_var.is('.before')) {
clone_row = clone_var.find('.sort-group .row:last');
insert_location = clone_var.find('.sort-group .row:first');
insert = 'insertBefore';
} else {
clone_row = clone_var.find('.sort-group .row:last');
insert_location = clone_var.find('.sort-group .row:last');
insert = 'insertAfter';
}
clone_row.clone(true)[insert](insert_location)
.addClass('add').removeClass('first')
.find('input[type=text], input[type=hidden], textarea, select').val('').attr('name', incrementProp).end()
.find('input, textarea, select').attr('id', incrementProp);
return false;
});
任何可以提供的帮助将不胜感激!
更新:添加了一个基本的小提琴。http://jsfiddle.net/85FY6/1/