2011-01-05 29 views
12

Tôi đang cố gắng sao chép một feildset sau đó gửi nội dung của đầu vào và chọn sử dụng serialize. Nó hoạt động đúng cách tuy nhiên lựa chọn không giữ giá trị của nó. Tôi đã thử một số phương pháp tôi đã tìm thấy nhưng không có gì có vẻ hiệu quả. Đây là cách tôi nhân bản và thiết lập dữ liệu hiện tại.jquery clone chọn không giữ giá trị

Làm cách nào để giữ giá trị được chọn khi sao chép?

$('body').append('<form id="form-to-submit" style="visibility:hidden;"></form>'); 
var fieldsetName = $this.parents('.fieldsetwrapper'); 
$('#form-to-submit').html($(fieldsetName).clone()); 
var data = $('#form-to-submit').serialize(); 
+1

Thay vì sao chép toàn bộ fieldset, w hy không chỉ tuần tự hóa dữ liệu từ fieldset như một đối tượng JS khi bạn muốn, và sử dụng đối tượng đó để khôi phục sau này (nếu đó là những gì bạn đang theo sau). Hay tôi hiểu lầm lý do bạn đang nhân bản? – Phrogz

+1

Không nên sử dụng '.html()' với '.clone()'. Bản sao cho các phần tử, trong khi '.html()' mong đợi một chuỗi. Sử dụng các phần tử trực tiếp: '$ ('# form-to-submit'). Empty(). Append ($ (fieldsetName) .clone());' –

+0

cùng một vấn đề ở trên thư viện nguyên mẫu – WonderLand

Trả lời

22

Yếu tố option duy trì selectedness hiện tại của nó với selected tài sản javascript (không bị nhầm lẫn với thuộc tính selected, tương ứng với mặc định lựa chọn).

Kể từ jQuery clone không clone selectedness hiện tại (http://bugs.jquery.com/ticket/1294), bạn sẽ phải làm điều đó bằng tay:

$('#form-to-submit').html($(fieldsetName).clone()); 
$('#form-to-submit select').val($('.fieldsetwrapper select').val()); 
+0

Xin chào, đây là một điều thú vị giải pháp, tôi không biết rằng jQuery có thể tìm thấy một mình nơi để đặt các giá trị được lựa chọn. Có cách nào để sử dụng biểu mẫu này dưới dạng toàn bộ và không chỉ chọn các yếu tố? Bạn có biết một liên kết nói về điều này không? Cảm ơn – FLX

+1

Tôi thấy rằng giải pháp này không hoạt động đối với nhiều menu chọn nếu họ có cha mẹ trực tiếp khác nhau. Thay vào đó, tôi phải lặp lại "từng" của các lựa chọn và kết hợp nó với lựa chọn tương ứng trong bản gốc với phương thức ".eq". Chỉ cần một lưu ý nhanh chóng cho bất cứ ai lướt qua! :) –

+0

@Casey, tôi whish bạn đã xây dựng với một đoạn mã :) Bạn vẫn phải có để có được chỉ số của quyền lựa chọn ban đầu? Hay là có một chức năng phép thuật nào khác? :-) – Peter

3

Bạn sẽ có thể thiết lập giá trị của phần tử mới select với giá trị của một tuổi:

$('#form-to-submit select').val($('.fieldsetwrapper select').val()); 
0

Trong trường hợp của tôi, tôi đã sử dụng

$('<form></form>').html($('.myDiv').clone()) 

và cố định vấn đề bằng cách thêm biểu mẫu khác vào đánh dấu

$('.myForm').serialize() 
Các vấn đề liên quan