jQuery clone()问题

时间:2011-07-21 09:08:15

标签: javascript jquery

当用户点击Add按钮时,我正在使用jquery克隆表单输入字段一切正常,但我有一个问题,如果我在表单输入字段中写一些内容并单击Add按钮,那么jQuery会将该文本复制到新的克隆的输入元素也是。

您可以尝试演示:http://jsbin.com/ikebil/2/edit

步骤:

  1. 打开链接,然后点击渲染

  2. 在输入字段中输入内容

  3. 点击添加按钮,它将创建一个新的输入字段,但也会复制上一个写入的文本。

  4. 原始代码:http://charlie.griefer.com/blog/2009/09/17/jquery-dynamically-adding-form-elements/

    因此,如果在前一个元素中写入任何内容,我需要删除该文本。

3 个答案:

答案 0 :(得分:4)

只需使用val清除克隆元素即可。我没有关注您的链接(总是在问题中发布代码),但例如:

var c = field.clone().val("");

克隆field,然后清除其中的值,并将克隆分配给c

更新:我查看了代码,您克隆了元素,但想要更改后代的值:

// create the new element via clone(), and manipulate it's ID using newNum value
var newElem = $('#input' + num).clone().attr('id', 'input' + newNum);

// manipulate the name/id values of the input inside the new element
newElem.children(':first').attr('id', 'name' + newNum).attr('name', 'name' + newNum);

只需将.val("")添加到最后一行:

newElem.children(':first').attr('id', 'name' + newNum).attr('name', 'name' + newNum).val("");

答案 1 :(得分:1)

clone复制元素的所有属性,包括其value。如果您需要,请在克隆后明确清除它:

var newElem = $("#input" + num).clone();
newElem.val("");

答案 2 :(得分:1)

最好的解决方案是在填充任何数据之前实际制作元素的副本,然后使用该“安全”副本并克隆它。
它更快更安全=>见working example