克隆表单和增量ID

请考虑以下forms:

利用Javascript(和jQuery),克隆整个表单并增加每个id的最简单方法是什么,以确保唯一性。

使用jQuery我会假设您最初将通过clone()克隆表单并迭代克隆的对象id并添加新的id fieldname1fieldname2等。但是,我对jQuery的了解并不是很好,这个项目几乎杀了我。

任何帮助都会很棒!

您可以clone()它,然后在将克隆元素附加到DOM之前,您将运行并将数字添加到每个id属性。

 (function() { var count = 0; window.duplicateForm = function() var source = $('form:first'), clone = source.clone(); clone.find(':input').attr('id', function(i, val) { return val + count; }); clone.appendTo('body'); count++; }; })(); 

jsFiddle 。

这个从0开始,但您可以轻松地从1开始count

如果你愿意,你也可以使用一个闭包 ,即

 var cloneForm = function(form, start) { start = start || 0; return function() { var clone = form.clone(); clone.find(':input').attr('id', function(i, val) { return val + start; }); start++; return clone; }; }; 

然后你会做…

 var cloneContactForm = cloneForm($('#contact-form'), 5); // Now I want to clone it and put it somewhere. $(cloneContactForm()).appendTo('body'); 

jsFiddle 。

这是一个没有更新任何ID的解决方案:

  1. 为所有表单提供相同的class
  2. 为所有字段name
  3. 请参阅与class级相关的所有表格的克隆表格
  4. 请参阅带有名称的字段

示例:如何为每个克隆表单赋予不同的id,然后对每个输入元素使用name

 

然后克隆它

 container.append($('.theForm:first').clone()); 

(或将第一个表单缓存在变量中)。

最后,访问输入字段:

 $('form.theForm:eq(0) [name=password]') // password from first form $('form.theForm:eq(1) [name=password]') // password from second form ... 

如果选择器查找效率是一个因素,那么有几种简单的方法来加速它,例如缓存具有不同forms的变量,缓存$('.theForm')和使用eq()方法等。

示例jsFiddle在这里: http : //jsfiddle.net/orip/dX4sY