jQuery有一个clone()
函数,克隆实际表单没有问题,但它不保留已输入表单的任何值。
有办法解决这个问题吗?
示例代码将非常感激。
碰到同样的问题,简单的解决方案:
// touch all input values
$('input:text').each(function() {
$(this).attr('value', $(this).val());
});
var clones = $('input:text').clone();
诀窍是这将改变DOM树中的实际“值”属性,否则您“即时”输入的数据仅存在于DOM“状态”中
根据笔记,这是一个解决方案。使用以下表格:
<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")
}
)
但是:Kua zxsw指出
另一个未被克隆的textarea值的简单修复是在HTML中包含以下JavaScript文件:http://jsfiddle.net/Jux3e/
它只是修补克隆方法,因此您可以包含该文件,然后忘记它。显然,克隆选择值也存在问题,同样的文件也修复了这个问题。
此文件链接到:https://github.com/spencertipping/jquery.fix.clone。这个小虫已经4岁了。
你可以使用这个jQuery插件。
http://bugs.jquery.com/ticket/3016
如果你需要复制字段本身,请检查这个小功能/**
* 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;
}
发现这个问题并编写了这个包装器:
relCopy
使用此代码复制textarea值
$.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 ); };