2011-01-05 2 views
12

Я пытаюсь клонировать feildset, а затем отправляю содержимое входов и выбирает с помощью сериализации. Он работает правильно, но выбор не сохраняет его значения. Я попробовал несколько методов, которые я нашел, но ничего не работает. Вот как я клонирую и устанавливаю текущие данные.jquery clone select does not keep value

Как сохранить значение при клонировании?

$('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

Вместо клонирования всего набора полей, w не просто сериализуйте данные из набора полей как объект JS, когда захотите, и используйте этот объект для восстановления позже (если это то, что вам нужно). Или я неправильно понял причину, по которой вы клонируете? – Phrogz

+1

Не рекомендуется использовать '.html()' с '.clone()'. Clone дает элементы, а '.html()' ожидает строку. Используйте элементы непосредственно: '$ ('# form-to-submit'). Empty(). Append ($ (fieldsetName) .clone());' –

+0

та же проблема находится в прототипе библиотеки – WonderLand

ответ

22

option элемент сохраняет текущее selectedness с selected Javascript недвижимости (не путать с атрибутом selected, который соответствует по умолчанию избранности).

С JQuery-х clone не клонирует текущий selectedness (http://bugs.jquery.com/ticket/1294), вам придется сделать это вручную:

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

Привет, это действительно интересно решение, я не знал, что jQuery может найти один, где разместить выбранные значения. Есть ли способ использовать эту форму всей формы, а не только элементы? Знаете ли вы ссылку, которая говорит об этом? Спасибо – FLX

+1

Я обнаружил, что это решение не работает для нескольких избранных меню, если у них были разные прямые родители. Вместо этого мне пришлось перебирать «каждый» выбранных и сопоставлять их с соответствующим выбором в оригинале с помощью метода «.eq». Просто быстрая заметка для всех, кто проскальзывает! :) –

+0

@ Casey, я понял, что вы разработали фрагмент кода :) Вам все равно нужно было бы получить индекс исходного выбора правильно? Или есть еще одна волшебная функция, которая делает это? :-) – Peter

3

Вы должны быть в состоянии установить значение нового select элемента стоимости старого:

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

В моем случае я использовал

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

и констатировала путем добавления другой формы к разметке

$('.myForm').serialize()