有没有办法在jQuery或JavaScript中克隆表单字段值?

jQuery有一个clone()函数,可以克隆实际的表单而没有任何问题,但是它不保留已经input表单的任何值。

有没有办法解决这个问题?

示例代码将不胜感激。

遇到同样的问题,简单的解决办法:

 // touch all input values $('input:text').each(function() { $(this).attr('value', $(this).val()); }); var clones = $('input:text').clone(); 

诀窍是这会改变DOM树中实际的'value'属性,否则你在'on-the-fly'中input的数据只存在于DOM'状态'

从注意到,这是一个解决scheme。 具有以下forms:

 <form id="old"> <textarea>Some Value</textarea> <input type="text" value="Some Value" /> <input type="checkbox" value="bob" checked /> <br /> </form> <input type="button" value="Clone" id="clone" /> 

这jQuery的作品,包括textareas:

 $( 'input#clone' ).click( function() { $( 'form#old textarea' ).text( $( 'form#old textarea' ).val() ) $("form#old").clone().attr( 'id', 'new_form' ).appendTo("body") } ) 

演示: http : //jsfiddle.net/Jux3e/

textarea值不被克隆的另一个简单的解决方法是在HTML中包含以下JavaScript文件: https : //github.com/spencertipping/jquery.fix.clone

它只是修补克隆方法,所以你可以包含文件,然后忘记它在那里。 显然,克隆select值也有问题,这个文件也修复了这个问题。

该文件链接到: http : //bugs.jquery.com/ticket/3016 。 该错误是4岁。

你可以使用这个jQuery插件。

 /** * clone element, including the textarea part */ $.fn.clone2 = function(val1, val2) { // ret for return value, cur for current jquery object var ret, cur; ret = $(this).clone(val1, val2); cur = $(this); // copy all value of textarea ret.find('textarea').each(function() { var value_baru; // use name attribute as unique id value_baru = sek.find('[name="$name"]'.replace('$name', $(this).attr('name'))) .val(); // set the new value to the textarea $(this).val(value_baru); }); // return val return ret; } 

如果你需要复制字段本身,请检查这个tinny函数relCopy

发现这个问题,并写了这个包装:

 $.fn.cloneField = function(withDataAndEvents) { var clones = []; this.each(function(){ var cln = $(this).clone(withDataAndEvents); cln.val($(this).val()); clones.push(cln.get(0)); }); return jQuery( clones ); }; 

使用此代码复制textarea值

 clonedObject.find(textareaObject).val(originalObject.find(textareaObject).val());