Есть ли способ клонировать значения полей формы в jQuery или javascript? - PullRequest
26 голосов
/ 15 июля 2010

jQuery имеет функцию clone(), которая без проблем клонирует реальную форму, но не сохраняет никаких значений, введенных в форму.

Есть ли способ обойти это?

Пример кода будет высоко ценится.

Ответы [ 7 ]

26 голосов
/ 29 сентября 2011

столкнулся с той же проблемой, простое решение:

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

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

Хитрость в том, что это изменит фактический атрибут 'value' в дереве DOM, в противном случае данные, которые вы вводите 'на лету''существует только в состоянии DOM'

8 голосов
/ 15 июля 2010

Исходя из заметок, вот решение. Со следующей формой:

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

4 голосов
/ 09 мая 2012

Другое простое исправление для не клонируемых значений текстовой области состоит в том, чтобы включить следующий файл JavaScript в ваш HTML: https://github.com/spencertipping/jquery.fix.clone

Он просто исправляет метод клонирования, чтобы вы могли включить файл и затем забыть о его наличии,Очевидно, есть проблема с клонированием значений выбора, и этот же файл также исправляет эту проблему.

Этот файл был связан с: http://bugs.jquery.com/ticket/3016. Ошибка 4 года.

0 голосов
/ 12 апреля 2013

Используйте этот код для копирования значений текстовой области

clonedObject.find(textareaObject).val(originalObject.find(textareaObject).val());
0 голосов
/ 03 января 2012

если вам нужно продублировать само поле, отметьте эту небольшую функцию

0 голосов
/ 29 ноября 2011

Нашел эту проблему и написал эту обертку:

$.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 голосов
/ 21 сентября 2011

Вы можете использовать этот плагин 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;
}
...