2010-07-14 68 views
22

jQuery有一个clone()函数,可以毫无问题地克隆实际的表单,但它不保留任何已输入到表单中的值。有没有办法在jQuery或JavaScript中克隆表单字段值?

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

示例代码将不胜感激。

+0

你能给出一个更有点背景?一个快速测试没有问题在这里:http://jsfiddle.net/meGyg/ – 2010-07-14 21:44:44

+0

我认为问题是如果你通过表单更改数据,然后尝试克隆它。分叉你的小提琴:http://jsfiddle.net/F9aWu/尝试改变形式,然后单击克隆。 – hookedonwinter 2010-07-14 22:26:38

+0

ya @ [nick craver]的解决方案工作正常,除了textarea部分 – hookedonwinter 2010-07-14 22:31:31

回答

7

从注意到干扰,这里有一个解决方案。用下面的形式:

<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") 

    } 
) 

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

0

你可以使用这个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; 
} 
24

遇到同样的问题,简单的解决方案:

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

var clones = $('input:text').clone(); 

的诀窍是,这将改变在DOM树中的实际“价值”属性,否则你上的输入”数据-fly”只存在于DOM '国家'

+0

这不需要逃避吗? – 2017-05-08 18:11:56

+1

@ChrisStryczynski我不这么认为,文本输入无法显示HTML,您将其设置为之前已有的值,并且引号不是问题,因为您要设置字符串属性值而不是打印纯HTML码。 – sled 2017-05-10 13:32:22

+0

这是有效的输入:文本,但复选框,单选按钮,文本区域等? – 2017-07-18 03:01:43

0

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

$.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); }; 
0

如果你需要复制该领域本身,看看这个自带的功能relCopy

0

使用此代码复制textarea的值

clonedObject.find(textareaObject).val(originalObject.find(textareaObject).val()); 
相关问题