Ich habe ein Formular mit vielen Eingabefeldern.
Ist es möglich, alle Eingabefelder dieses Formulars in einem assoziativen Array abzurufen, wenn ich das Ereignis zum Senden eines Formulars mit jQuery abfange?
javascript
jquery
Vasil
quelle
quelle
Antworten:
Dank des Tipps von Simon_Weaver können Sie dies auf folgende Weise tun
serializeArray
:Beachten Sie, dass dieses Snippet bei
<select multiple>
Elementen fehlschlägt .Es scheint, dass die neuen HTML 5-Formulareingaben
serializeArray
in jQuery Version 1.3 nicht funktionieren . Dies funktioniert in Version 1.4+quelle
name
und zurückvalue
. Eine bessere Lösung könnte darin bestehen, die Ausgabe von serializeArray in das erforderliche Format zu verarbeiten.<select>
Elementen für die erste Option ? Ich habe es versucht,var $inputs = $('#new-ticket :input, :select');
aber das funktioniert nicht. Kennt jemand den richtigen Weg, weil ich nicht glaube, dass ich das richtig mache?$("#new-ticket :input, #new-ticket :select")
, oder noch besser,$(":input, :select", "#new-ticket")
Spät zur Party auf diese Frage, aber das ist noch einfacher:
quelle
.serialize()
( api.jquery.com/serialize ) alle Elemente des Formulars in eine einzelne Zeichenfolge ein, die zum Anhängen an eine URL in einer Abfragezeichenfolge bereit ist, und ahmt im Wesentlichen eine GET-Formularanforderung nach. Dies würde nicht das erreichen, was Nickfs Antwort bewirkt..serialize()
auch nur mit Formularelementen. So$('form select').serialize()
werden die Daten nur für wählt serialisiert.$('#myForm')
Verwenden Sie $ (this), anstatt es zu wiederholen .Das Plugin jquery.form kann dabei helfen, wonach andere suchen, um diese Frage zu beantworten. Ich bin mir nicht sicher, ob es direkt das tut, was Sie wollen oder nicht.
Es gibt auch die Funktion serializeArray .
quelle
Manchmal finde ich es nützlicher, einen nach dem anderen zu bekommen. Dafür gibt es folgendes:
quelle
[0].value
daran$(...)[0].value;
gab mir also den Wert der Eingabe direkt, danke!Die Elementvariable enthält alle Eingaben, Auswahlen, Textbereiche und Feldsätze innerhalb des Formulars.
quelle
Hier ist eine andere Lösung: Auf diese Weise können Sie alle Daten über das Formular abrufen und in einem serverseitigen Aufruf oder Ähnlichem verwenden.
Sie können dies dann mit Ajax-Aufrufen verwenden:
Hoffe, dass dies für jeden von euch von Nutzen ist :)
quelle
Hatte ein ähnliches Problem mit einer leichten Wendung und ich dachte, ich würde das rauswerfen. Ich habe eine Rückruffunktion, die das Formular abruft, sodass ich bereits ein Formularobjekt hatte und keine einfachen Varianten verwenden konnte
$('form:input')
. Stattdessen habe ich mir Folgendes ausgedacht:Es ist eine ähnliche, aber nicht identische Situation, aber ich fand diesen Thread sehr nützlich und dachte, ich würde ihn am Ende verstauen und hoffe, jemand anderes fand ihn nützlich.
quelle
Assoziativ? Nicht ohne Arbeit, aber Sie können generische Selektoren verwenden:
quelle
jQuery's
serializeArray
enthält keine deaktivierten Felder. Wenn Sie diese ebenfalls benötigen, versuchen Sie Folgendes:quelle
http://api.jquery.com/serializearray/
Dies kann auch ohne jQuery mithilfe des FormData-Objekts XMLHttpRequest Level 2 erfolgen
http://www.w3.org/TR/2010/WD-XMLHttpRequest2-20100907/#the-formdata-interface
quelle
Vergessen Sie nicht die Kontrollkästchen und Optionsfelder -
quelle
Dieser Code funktioniert anstelle des Namens. Geben Sie per E-Mail den Namen Ihres Formularfelds ein
quelle
Es scheint seltsam, dass niemand eine präzise Lösung für das Abrufen von Listendaten bewertet oder vorgeschlagen hat. Kaum ein Formular wird ein eindimensionales Objekt sein.
Der Nachteil dieser Lösung ist natürlich, dass auf Ihre Singleton-Objekte über den Index [0] zugegriffen werden muss. Aber IMO ist das viel besser als die Verwendung einer der Dutzend-Linien-Mapping-Lösungen.
quelle
Ich hatte das gleiche Problem und löste es auf andere Weise.
Es gibt den Wert aller Eingabefelder zurück. Sie können das ändern
$(':input')
, um genauer zu sein.quelle
Gleiche Lösung wie von nickf angegeben , jedoch unter Berücksichtigung der Array-Eingabenamen, z
<input type="text" name="array[]" />
quelle
Wenn Sie mehrere Werte von Eingaben erhalten müssen und [] verwenden, um die Eingaben mit mehreren Werten zu definieren, können Sie Folgendes verwenden:
quelle
Inspiriert von den Antworten von Lance Rushing und Simon_Weaver ist dies meine Lieblingslösung.
Die Ausgabe ist ein Array von Objekten, z
Mit dem Code unten,
seine endgültige Ausgabe wäre
quelle
Ich benutze diesen Code ohne jede Schleife:
quelle
Ich hoffe, das ist sowohl hilfreich als auch am einfachsten.
quelle
Als ich einen Ajax-Aufruf mit allen Formularfeldern durchführen musste, hatte ich Probleme mit der Eingabeauswahl: gab alle Kontrollkästchen zurück, unabhängig davon, ob sie aktiviert waren oder nicht. Ich habe einen neuen Selektor hinzugefügt, um nur die übertragbaren Formularelemente zu erhalten:
Verwendungszweck:
Ich habe es zwar noch nicht mit mehreren Auswahlfeldern getestet, aber es funktioniert, um alle Formularfelder so zu erhalten, wie es eine Standardübermittlung tun würde.
Ich habe dies verwendet, als ich die Produktoptionen auf einer OpenCart-Site so angepasst habe, dass Kontrollkästchen und Textfelder sowie der Standard-Auswahlfeldtyp enthalten sind.
quelle
serialize () ist die beste Methode. @ Christopher Parker sagt, dass Nickfs Antwort mehr leistet, berücksichtigt jedoch nicht, dass das Formular möglicherweise Textbereiche und ausgewählte Menüs enthält. Es ist weitaus besser, serialize () zu verwenden und das dann nach Bedarf zu bearbeiten. Daten von serialize () können entweder in einem Ajax-Post oder in get verwendet werden, sodass dort kein Problem auftritt.
quelle
Hoffe das hilft jemandem. :) :)
quelle
Alle Antworten sind gut, aber wenn es ein Feld gibt, das Sie in dieser Funktion gerne ignorieren? Geben Sie dem Feld einfach eine Eigenschaft, z. B. ignore_this:
Und in Ihrer Serialisierungsfunktion:
Auf diese Weise ignorieren Sie einige Felder.
quelle
$('.mandatory');
und!$('.mandatory');
ignore_this
zu,data-ignore-this="true"
anstatt Ihre eigenen Attribute zu erstellen, die w3c nicht validierenVersuchen Sie den folgenden Code:
quelle
Für mehrere ausgewählte Elemente (
<select multiple="multiple">
) habe ich die Lösung von @Jason Norwood-Young geändert, damit sie funktioniert.Die Antwort (wie gebucht) übernimmt nur den Wert des ersten ausgewählten Elements, nicht alle . Es wurde auch nicht initialisiert oder zurückgegeben
data
, wobei ersteres einen JavaScript-Fehler auslöste.Hier ist die neue Version:
Verwendungszweck:
Hinweis: Sie müssen nur sicherstellen, dass das
name
Ihrer Auswahl[]
an das Ende angehängt wurde, zum Beispiel:quelle
quelle