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.
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.
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
@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.
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")
}
)
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.
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;
}
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.
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
0 Stimmen
Die anfängliche Darstellung der Formularelemente gerät aus dem Gleichgewicht mit dem DOM, wenn wir Eigenschaften wie
value
undchecked
direkt ändern. Wenn wir einen Knoten klonen, wird die Darstellung jedes DOM-Knotens kopiert, was jedoch nicht die Objekteigenschaften wievalue
umfasst. Eine Lösung besteht darin, die relevanten Eigenschaften (value, checked, selected) für jedes Formularelement in die geklonten Knoten zu kopieren. Die andere Möglichkeit besteht darin, das Element jedes Mal zu ändern, wenn eine Änderung vorgenommen wird. Also statt element.val('etwas') zu machen, element.setAttribute('value', 'etwas'), was beim Klonen funktionieren sollte.