我正在开发一个表单,用户可以根据需要添加任意数量的元素,问题是,当我使用clone时,所有创建的元素都具有相同的名称,因此无法智能化检索以在PHP中进一步处理。我怎么能找到解决方法?
这是我的HTML:
<form id="form" action="/create/table" method="post">
<table class="admtable, reportable">
<caption>Admins</caption>
<thead>
<tr>
<th>Name</th>
<th>Username</th>
<th>Email</th>
<td><button class="add">Add</button></td>
</tr>
</thead>
<tbody>
<tr class="prototype">
<td><input type="text" name="name[]" value="" /></td>
<td><input type="text" name="username[]" value="" /></td>
<td><input type="text" name="email[]" value="" /></td>
<td><button class="remove">Delete</button></td>
</tr>
</table>
<table class="usrtable, reportable">
<caption>Users</caption>
<thead>
<tr>
<th>URL</th>
<th>Keyword</th>
<th>Link</th>
<td><button class="add">Add</button></td>
</tr>
</thead>
<tbody>
<tr class="prototype">
<td><input type="text" name="name[]" value="" /></td>
<td><input type="text" name="username[]" value="" /></td>
<td><input type="text" name="email[]" value="" /></td>
<td><button class="remove">Delete</button></td>
</tr>
</table> </form>
到目前为止这是jQuery代码:
$(document).ready(function() {
var className = $(this).closest('table').attr("add"); //??
// Add button functionality
$("button.add").click(function() {
var master = $(this).closest("table");
// Get a new row based on the prototype row
var prot = master.find(".prototype").clone(true);
prot.attr("class", "");
master.find("tbody").append(prot);
});
// Remove button functionality
$("button.remove").live("click", function() {
$(this).closest("tr").remove();
});
});
答案 0 :(得分:1)
为什么不改变ID&amp;使用 .attr() setter来自己生成对象的名称?
通过这种方式,您可以很好地控制正在发生的事情,没有时髦的名字或未知的ID。
编辑:或者您可能想尝试http://api.jquery.com/category/plugins/templates/
答案 1 :(得分:0)
为什么不为每个表使用不同的名称集?例如,user_names[]
vs admin_names[]
。然后,服务器端将有一个用户名列表,管理员名称列表等,而不是第一个用户名+第一个管理员名称的列表。
另请注意,您不需要使用逗号分隔多个类名。我很惊讶没有破坏你的CSS。