27 Stimmen

Gibt es eine Möglichkeit, Formularfeldwerte in jQuery oder Javascript zu klonen?

JQuery hat eine clone() Funktion, die das tatsächliche Formular problemlos klonen kann, jedoch werden keine Werte beibehalten, die in das Formular eingegeben wurden.

Gibt es einen Weg, dies zu umgehen?

Beispielcode wäre sehr hilfreich.

0 Stimmen

Können Sie etwas mehr Kontext geben? Ein schneller Test hat hier keine Probleme: jsfiddle.net/meGyg

0 Stimmen

Ich denke, das Problem liegt darin, dass wenn Sie die Daten über das Formular ändern und dann versuchen, sie zu klonen. Ich habe deine Fiddle geforked: jsfiddle.net/F9aWu Versuchen Sie, das Formular zu ändern, und klicken Sie dann auf Klonen.

0 Stimmen

Ya @[nick craver]'s Lösung funktioniert gut, außer dem Textbereichsteil

27voto

sled Punkte 14307

Bin auf dasselbe Problem gestoßen, einfache Lösung:

// Alle Eingabewerte berühren
$('input:text').each(function() {
    $(this).attr('value', $(this).val());
});

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

Der Trick besteht darin, dass dadurch das tatsächliche 'value'-Attribut im DOM-Baum geändert wird, da die Daten, die Sie 'on-the-fly' eingeben, sonst nur im DOM-'Zustand' existieren

0 Stimmen

Müsste dies nicht escaped werden?

1 Stimmen

@ChrisStryczynski Ich denke nicht, dass Texteingabe HTML anzeigen kann, Sie setzen es auf den Wert, den es bereits hatte, und Anführungszeichen sind kein Problem, weil Sie einen Zeichenfolgenattributwert setzen, anstatt einfachen HTML-Code zu drucken.

1 Stimmen

Dies ist wirksam für input:text, aber wie sieht es mit Kontrollkästchen, Radio-Buttons, Textbereichen und ähnlichem aus?

8voto

hookedonwinter Punkte 12088

Ausgehend von den Notizen hier eine Lösung. Mit dem folgenden Formular:

    Einiger Wert

Dieses jQuery funktioniert, einschließlich der Textareas:

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

    }
)

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

4voto

Ben Punkte 1943

Ein weiterer einfacher Fix für das Problem, dass die Textarea-Werte nicht geklont werden, besteht darin, die folgende JavaScript-Datei in Ihren HTML-Code einzubinden: https://github.com/spencertipping/jquery.fix.clone

Es patcht einfach die Clone-Methode, damit Sie die Datei einbinden können und dann vergessen können, dass sie da ist. Anscheinend gibt es auch ein Problem mit dem Klonen von Select-Werten, und dieselbe Datei behebt auch dieses Problem.

Diese Datei wurde von hier verlinkt: http://bugs.jquery.com/ticket/3016. Der Bug ist 4 Jahre alt.

0voto

waza Punkte 446

Sie können dieses jQuery-Plugin verwenden.

/**
 * Element klonen, einschließlich des Textarea-Teils
 */

$.fn.clone2 = function(val1, val2) {
    // ret für Rückgabewert, cur für aktuelles jQuery-Objekt
    var ret, cur;
    ret = $(this).clone(val1, val2);
    cur = $(this);

    // Kopieren des Werts aller Textareas
    ret.find('textarea').each(function() {
        var value_baru;

        // Verwendung des Namen-Attributs als eindeutige ID
        value_baru = sek.find('[name="$name"]'.replace('$name', $(this).attr('name')))
                        .val();

        // den neuen Wert im Textfeld setzen
        $(this).val(value_baru);
    });

    // Rückgabewert zurückgeben
    return ret;
}

0voto

dee32 Punkte 1

Ich habe dieses Problem gefunden und diesen Wrapper geschrieben:

$.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 ); };

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X