问题描述
|
我正在使用一种表单,在该表单中用户将能够根据需要添加任意数量的元素,问题是,当我使用克隆进行操作时,所有创建的元素都具有相同的名称,因此无法智能地检索到用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();
});
});
解决方法
为什么不使用.attr()setter自己更改结果对象的ID和名称?
这样,您可以很好地控制正在发生的事情,没有时髦的名称或未知的ID。
编辑:或者也许您想尝试http://api.jquery.com/category/plugins/templates/
, 为什么不为每个表使用不同的名称集?例如,
user_names[]
与admin_names[]
。然后,服务器端将具有用户名列表,管理员名称列表等,而不是第一个用户名+第一个管理员名称的列表。
另外,请注意,您不需要逗号来分隔多个类名。我很惊讶没有破坏CSS。