如果您使用 PHP 作为您的服务器端语言,您可以这样做:
<div class="clone_block">
Name: <input type="text" name="items[][name]" /><br />
Amount: <input type="text" name="items[][amount]" /><br />
<button class="delete">Delete</button>
</div>
PHP 将在收到数据时自动处理创建正确的偏移索引。
然而,要回答您的问题,一旦您克隆了您的块,您只需要导航其结构并使用递增的数字更改名称属性。或者更好地导航所有输入并在使用添加或删除按钮时重新索引它们......这将允许删除。
/// find each row with inputs
$('div.form_row').each(function(rowIndex){
/// find each input with a name attribute inside each row
$(this).find('input[name]').each(function(){
var name;
name = $(this).attr('name');
name = name.replace(/\[[0-9]+\]/g, '['+rowIndex+']');
$(this).attr('name',name);
});
});
以上将使用以下标记工作(并且已经过测试),您应该看到索引被重新排序:
<div class="form_row"><input name="something[0][abc]"></div>
<div class="form_row"><input name="something[2][abc]"></div>
<div class="form_row"><input name="something[3][abc]"></div>
更正!
刚刚意识到依赖 PHP 生成索引的错误......如果您的索引是数组结构的最后一部分,它将起作用:
something[abc][]
something[def][]
但是,如果您正在使用(就像您一样):
something[][abc]
something[][def]
您将结束以下 PHP 端:
array (
'0' => array( 'abc' => 'value' ),
'1' => array( 'def' => 'value' ),
)
而不是:
array (
'0' => array(
'abc' => 'value',
'def' => 'value',
),
);
这可能是你想要的更多。因此,对于您的示例,请忽略我提到的 PHP 路由并改用 jQuery 代码段。但是,如果每行只有一个输入,PHP 解决方案仍然很有用......