克隆表单和增量ID
请考虑以下forms:
利用Javascript(和jQuery),克隆整个表单并增加每个id的最简单方法是什么,以确保唯一性。
使用jQuery我会假设您最初将通过clone()
克隆表单并迭代克隆的对象id
并添加新的id fieldname1
, fieldname2
等。但是,我对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的解决方案:
- 为所有表单提供相同的
class
- 为所有字段
name
- 请参阅与class级相关的所有表格的克隆表格
- 请参阅带有名称的字段
示例:如何为每个克隆表单赋予不同的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