Wie der Titel sagt, versuche ich, jQuery eine Reihe zusätzlicher Feldsets basierend auf dem in einem Dropdown-Feld ausgewählten Wert hinzuzufügen. Schachtel Wenn beispielsweise die Seite geladen wird, hat das Dropdown-Feld den Standardwert 1, und das Standard-Fieldset wird angezeigt. Wenn der Benutzer nun einen anderen Wert in dieser Dropdown-Liste auswählt, sollte die Anzahl der Feldgruppen durch Klonen entsprechend angepasst werden (ich nehme an, dies wäre die beste Lösung). Hier ist, was ich bisher:Verwenden von jQuery zum dynamischen Hinzufügen von Formularfeldern (oder Feldgruppen) basierend auf einem Dropdown-Wert
Dropdown-Feld Code ...
<select id="itemCount" name="itemCount">
<option value="1">1 item</option>
<option value="2">2 items</option>
<option value="3">3 items</option>
<option value="4">4 items</option>
<option value="5">5 items</option>
<option value="6">6 items</option>
</select>
... die jQuery ändern Zuhörer ...
$(document).ready(function() {
$("#itemCount").change(function(){
var itemCountVal = jQuery(this).val();
$("#item_dup_1").fieldsManage(itemCountVal);
});
});
... und die Funktion selbst (es basiert tatsächlich auf einem jQuery-Plugin, das ich dachte, war ein guter Ausgangspunkt für das, was ich brauche):
jQuery.fn.fieldsManage = function (number) {
var clone,
objTemplate = source.clone(true),
source = jQuery(this),
maxClones = number - 1,
clones = [];
if (clones.length < maxClones) {
while (clones.length < maxClones) {
clone = objTemplate.clone(true).insertAfter(clones[clones.length - 1] || source);
clones.push(clone);
}
}
if (clones.length > maxClones) {
// Fieldsets removal function goes here.
}
}
das Objekt, das ist c loned ist etwas wie <fieldset id="item_dup_1"><input><input><input></fieldset>
. Ich denke nicht, dass es notwendig ist, auch den vollständigen Code dafür zu zeigen.
Dies wirkt wie ein Charme für die erste Änderung, aber wenn der Benutzer den Wert erneut ändert, ist es, wenn die Dinge schief gehen, und anstatt die richtige Anzahl der Feldsets zeigt es mehr. Es sieht so aus, als würde es die Anzahl der benötigten Fieldsets von Grund auf neu berechnen, abgesehen von der Tatsache, dass Fieldsets bereits hinzugefügt wurden, und das ist, was mein Problem tatsächlich ist. Ich habe auch eine Funktion (hier nicht gezeigt, nur um die Frage klar und so kurz wie möglich zu halten), die dem geklonten Fieldset neue IDs zuweist, um doppelte IDs zu verhindern, und die ohne Probleme funktioniert.
Ich bin überzeugt, dass ich etwas falsch mache, aber ich habe meinen Kopf gegen eine Wand damit seit zwei Tagen geschlagen, versuchend zu finden, was es ohne Glück so überhaupt ist, jede Hilfe würde mehr als geschätzt sein !
Vielen Dank im Voraus!
Brilliant, wirkt wie ein Charme! Das war etwas, was ich im Sinn hatte, blieb aber auf dem Weg stecken. Vielen Dank, sehr geschätzt. –
Vielleicht ist dies allgemein bekannt, aber ich habe festgestellt, dass, wenn Daten in die Eingabefelder des Fieldsets eingegeben wurden, das geklont wird, bevor die Fieldset-Anzahl geändert wird, die eingegebenen Daten ebenfalls geklont werden. Doing eine einfache clone.find ("input"). Je (function() {jQuery (this) .val ("")}); Nachdem der Klon erstellt wurde, erhalten Sie einen sauberen Klon, mit dem Sie arbeiten können. Hoffe, das wird jemandem ein paar Minuten ersparen. –
Nun, das ist mehr oder weniger allgemein bekannt und auch die Art und Weise, wie Klon funktionieren soll. Die jQuery 'clone' Methode verwendet intern die normale DOM Methode' cloneNode (true) '. Überprüfen Sie hier für eine Beschreibung, wie es sich verhält http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-3A0ED0A4 – jitter