【发布时间】:2012-11-08 09:07:08
【问题描述】:
我必须在表单中实现“添加新行”功能。表单的结构类似于:
<table>
<tr>
<td><input type="text" name="v1[label]" /></td>
<td><input type="text" name="v1[observation]" /></td>
<td><input type="text" name="v1[remarks]" /></td>
</tr>
<tr>
<td><input type="text" name="v2[label]" /></td>
<td><input type="text" name="v2[observation]" /></td>
<td><input type="text" name="v2[remarks]" /></td>
</tr>
<tr>
<td colspan="3">
<input type="button" id="addrow" value="Add One More Row">
<input type="submit" name="proceed" value="Submit" />
</td>
</tr>
</table>
正如所见,每一行,v[] 的数量都会增加。 v1、v2..等等
我在寻找什么
当点击“Add One More Row”按钮时,应该会发生以下情况
- 在最后一行(带有 按钮)
- name 属性值加 1(即 v2[label] 变为 v3[label], v2[observation] 变成 v3[observation] 等等)在那个 行
我尝试了什么
我最接近的是使用jQuery'sclone()。这确实完美地添加了行。但是我发现每次单击按钮时很难找到一种方法将 name 属性的值增加 1。
jQUERY 当前正在使用
$('input:button[id="addrow"]').click(function(){
var secondlast = $('table tr:last').prev('tr');
secondlast.clone().insertBefore(secondlast);
});
如果我单击该按钮两次,我会添加以下 HTML
<tr>
<td><input type="text" name="v2[label]" /></td>
<td><input type="text" name="v2[observation]" /></td>
<td><input type="text" name="v2[remarks]" /></td>
</tr>
<tr>
<td><input type="text" name="v2[label]" /></td>
<td><input type="text" name="v2[observation]" /></td>
<td><input type="text" name="v2[remarks]" /></td>
</tr>
所以添加了一行,但 name 属性仍然是 v2,而第三和第四行应该是 v3 和 v4。我知道clone() 无法做到这一点,这就是我寻找替代方案的原因。
【问题讨论】:
-
您是否尝试过在插入之前处理克隆?例如,
secondlast.clone().each('input')之类的东西,解析名称并替换数字? -
嗯..这是有道理的。我会试试看我能不能做到这一点
-
@Eregrith 我对逻辑非常清楚,但发现很难将其转换为编程语法:(
-
您可以操作属性并根据事件点有多少表行来增加它。
标签: javascript jquery