jQuery有一个clone()
函数,可以毫无问题地克隆实际的表单,但它不保留任何已输入到表单中的值。有没有办法在jQuery或JavaScript中克隆表单字段值?
有没有办法解决这个问题?
示例代码将不胜感激。
jQuery有一个clone()
函数,可以毫无问题地克隆实际的表单,但它不保留任何已输入到表单中的值。有没有办法在jQuery或JavaScript中克隆表单字段值?
有没有办法解决这个问题?
示例代码将不胜感激。
从注意到干扰,这里有一个解决方案。用下面的形式:
<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的作品,包括文字区域:
$('input#clone').click(
function()
{
$('form#old textarea').text($('form#old textarea').val())
$("form#old").clone().attr('id', 'new_form').appendTo("body")
}
)
你可以使用这个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;
}
遇到同样的问题,简单的解决方案:
// touch all input values
$('input:text').each(function() {
$(this).attr('value', $(this).val());
});
var clones = $('input:text').clone();
的诀窍是,这将改变在DOM树中的实际“价值”属性,否则你上的输入”数据-fly”只存在于DOM '国家'
这不需要逃避吗? – 2017-05-08 18:11:56
@ChrisStryczynski我不这么认为,文本输入无法显示HTML,您将其设置为之前已有的值,并且引号不是问题,因为您要设置字符串属性值而不是打印纯HTML码。 – sled 2017-05-10 13:32:22
这是有效的输入:文本,但复选框,单选按钮,文本区域等? – 2017-07-18 03:01:43
发现了这个问题,并写了这个包装:
$.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); };
如果你需要复制该领域本身,看看这个自带的功能relCopy
另一个简单的办法不被复制的文本域值是在HTML下面的JavaScript文件:https://github.com/spencertipping/jquery.fix.clone
它只是修补的克隆方法所以你可以包含文件,然后忘记它在那里。显然克隆选择值也有问题,并且这个文件也修复了这个问题。
此文件关联到:http://bugs.jquery.com/ticket/3016。该错误是4岁。
使用此代码复制textarea的值
clonedObject.find(textareaObject).val(originalObject.find(textareaObject).val());
你能给出一个更有点背景?一个快速测试没有问题在这里:http://jsfiddle.net/meGyg/ – 2010-07-14 21:44:44
我认为问题是如果你通过表单更改数据,然后尝试克隆它。分叉你的小提琴:http://jsfiddle.net/F9aWu/尝试改变形式,然后单击克隆。 – hookedonwinter 2010-07-14 22:26:38
ya @ [nick craver]的解决方案工作正常,除了textarea部分 – hookedonwinter 2010-07-14 22:31:31