如果我希望克隆元素具有不同的名称,我应该使用什么而不是.clone()?

时间:2011-05-27 23:15:26

标签: jquery

我正在开发一个表单,用户可以根据需要添加任意数量的元素,问题是,当我使用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();
});
});

2 个答案:

答案 0 :(得分:1)

为什么不改变ID&amp;使用 .attr() setter来自己生成对象的名称?
通过这种方式,您可以很好地控制正在发生的事情,没有时髦的名字或未知的ID。

编辑:或者您可能想尝试http://api.jquery.com/category/plugins/templates/

答案 1 :(得分:0)

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

另请注意,您不需要使用逗号分隔多个类名。我很惊讶没有破坏你的CSS。