2011-05-27 67 views
0

我正在制作一个表单,用户可以根据需要添加尽可能多的元素,问题是,当我使用克隆进行操作时,所有创建的元素都具有相同的名称,因此无法智能检索用于PHP中的进一步处理。我怎么能找到解决办法?如果我想克隆的元素具有不同的名称,应该使用什么而不是.clone()?

这是我的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(); 
}); 
}); 

回答

1

为什么不改变IDS自己所得到的对象&名称,使用.attr ()二传手?
这样你就可以很好地控制发生了什么,没有时髦的名字或未知的ID。

编辑:也许你想尝试http://api.jquery.com/category/plugins/templates/

+0

对不起,但我从来没有用过这些,我真的不知道我在找什么。我实际上试图以某种方式现在创建一个计数器... var rowCount = $(className).length;这不是对我做任何魔术,虽然大声笑 – 2011-05-27 23:29:16

+0

以及它可能没有做任何魔术,因为它必须每次插入/更新任何元素时被解雇..这不是一个“活”事件可以这么说 – tXK 2011-05-29 19:16:32

0

你为什么不使用一组不同的名称为每个表?例如,user_names[] vs admin_names[]。然后,服务器端将有一个用户名列表,管理员名称列表等,而不是第一个用户名+第一个管理员名称的列表。

此外,请注意,您不需要逗号来分隔多个类名。我很惊讶,这不是打破你的CSS。

+0

我看到你但是,如果我使用user_names [],它会是相同的,因为clone()完全是这样。下一行的用户名字段也将被命名为user_name – 2011-05-28 13:45:45

+0

是的,然后服务器将在$ _GET ['user_names']'中有一个名称数组。 – Eevee 2011-05-28 21:09:24

相关问题