2010-07-14 57 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()); 
相關問題