2010-07-14 20 views
22

jQuery có hàm clone() sao chép biểu mẫu thực tế mà không có vấn đề gì, nhưng nó không giữ lại bất kỳ giá trị nào đã được nhập vào biểu mẫu.Có cách nào để sao chép các giá trị trường biểu mẫu trong jQuery hoặc javascript không?

Có cách nào để giải quyết vấn đề này không?

Mã mẫu sẽ được đánh giá cao.

+0

Bạn có thể cho một bối cảnh nhiều hơn chút? Một thử nghiệm nhanh chóng không có vấn đề ở đây: http://jsfiddle.net/meGyg/ –

+0

Tôi nghĩ rằng vấn đề là nếu bạn thay đổi dữ liệu thông qua biểu mẫu, và sau đó cố gắng sao chép nó. Ngắt câu đố của bạn: http://jsfiddle.net/F9aWu/ Cố gắng thay đổi biểu mẫu, sau đó nhấp vào bản sao. – hookedonwinter

+0

giải pháp ya @ [nick craver] hoạt động tốt ngoại trừ phần văn bản – hookedonwinter

Trả lời

7

Xuất phát từ ghi chú, đây là giải pháp. Với các hình thức sau đây:

<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 này hoạt động, bao gồm cả textareas:

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

    } 
) 

Demo: http://jsfiddle.net/Jux3e/

0

Bạn có thể sử dụng jQuery Plugin này.

/** 
* 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

chạy vào cùng một vấn đề, giải pháp đơn giản:

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

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

lừa là điều này sẽ thay đổi thuộc tính 'giá trị' thực tế trong cây DOM, nếu không dữ liệu bạn nhập 'on-the -fly' chỉ tồn tại trong DOM 'nhà nước'

+0

Điều này không cần phải được thoát? –

+1

@ChrisStryczynski Tôi không nghĩ vậy, đầu vào văn bản không thể hiển thị HTML, bạn đang đặt nó thành giá trị đã có trước đó và dấu ngoặc kép không phải là vấn đề bởi vì bạn đang đặt giá trị thuộc tính chuỗi thay vì in HTML thuần túy mã. – sled

+0

điều này có hiệu quả đối với đầu vào: văn bản, nhưng về hộp kiểm, nút radio, vùng văn bản và nội dung tương tự thì sao? –

0

Tìm thấy vấn đề này và đã viết wrapper này:

$.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

nếu bạn cần phải lặp lại trong các lĩnh vực riêng của mình, kiểm tra chức năng tinny này relCopy

3

Một sửa chữa dễ dàng cho các giá trị textarea không được nhân bản là bao gồm các tập tin JavaScript sau trong HTML của bạn: https://github.com/spencertipping/jquery.fix.clone

Nó chỉ vá các phương pháp nhân bản vì vậy bạn có thể bao gồm các tập tin và sau đó quên nó ở đó. Rõ ràng có một vấn đề với cloneing chọn giá trị quá và cùng một tập tin này sửa chữa vấn đề là tốt.

Tệp này được liên kết đến từ: http://bugs.jquery.com/ticket/3016. Lỗi này là 4 tuổi.

0

Sử dụng mã này để sao chép textarea giá trị

clonedObject.find(textareaObject).val(originalObject.find(textareaObject).val()); 
Các vấn đề liên quan