Gibt es eine einfache, einzeilige Möglichkeit, die Daten eines Formulars so abzurufen, wie es wäre, wenn es nur auf klassische HTML-Weise übermittelt würde?
Zum Beispiel:
<form>
<input type="radio" name="foo" value="1" checked="checked" />
<input type="radio" name="foo" value="0" />
<input name="bar" value="xxx" />
<select name="this">
<option value="hi" selected="selected">Hi</option>
<option value="ho">Ho</option>
</form>
Ausgabe:
{
"foo": "1",
"bar": "xxx",
"this": "hi"
}
So etwas ist zu einfach, da es keine (korrekten) Textbereiche, Auswahlmöglichkeiten, Optionsfelder und Kontrollkästchen enthält:
$("#form input").each(function () {
data[theFieldName] = theFieldValue;
});
javascript
jquery
forms
Bart van Heukelom
quelle
quelle
Antworten:
Demo
quelle
_.object($("#myform").serializeArray().map(function(v) {return [v.name, v.value];} ))
Verwenden Sie
$('form').serializeArray()
, um ein Array zurückzugeben :Eine andere Option ist
$('form').serialize()
, die eine Zeichenfolge zurückgibt :Schauen Sie sich diese jsfiddle-Demo an
quelle
serializeArray
wäre so viel nützlicher, wenn es ein Objekt mit Schlüssel-Wert-Paaren zurückgeben würdename="multiple[]"
nicht funktioniert. Die Lösung für die POST-Methode ist dieselbe. Verwenden Sie einfach $ ('form'). Serialize (). Außerdem ist die POST-Methode nicht wie GET in den meisten Browsern auf 2000 Zeichen begrenzt und kann daher auch für ziemlich große Datenmengen verwendet werden.name
Attribut haben muss, um einen Wert aus einer Formulareingabe aufzuzeichnen .Aktualisierte Antwort für 2014: HTML5 FormData erledigt dies
Sie können formData dann genau so veröffentlichen, wie es ist - es enthält alle Namen und Werte, die im Formular verwendet werden.
quelle
entries()
Methode [MDN-Seite ].Gibt basierend auf
jQuery.serializeArray
Schlüssel-Wert-Paare zurück.quelle
Dies ist eine pingelige Antwort, aber lassen Sie mich erklären, warum dies eine bessere Lösung ist:
Wir behandeln ein Formular ordnungsgemäß und nicht per Knopfdruck. Einige Leute drücken gerne die Eingabetaste auf Felder. Einige Leute verwenden alternative Eingabegeräte wie Spracheingabegeräte oder andere Eingabehilfen. Wenn Sie das Formular abschicken, lösen Sie es für alle richtig.
Wir untersuchen die Formulardaten für das tatsächlich übermittelte Formular. Wenn Sie Ihre Formularauswahl später ändern, müssen Sie die Auswahl nicht für alle Felder ändern. Darüber hinaus haben Sie möglicherweise mehrere Formulare mit denselben Eingabenamen. Keine Notwendigkeit, mit übermäßigen IDs zu disambiguieren und was nicht, verfolgen Sie einfach die Eingaben basierend auf dem eingereichten Formular. Auf diese Weise können Sie auch einen einzelnen Ereignishandler für mehrere Formulare verwenden, wenn dies für Ihre Situation angemessen ist.
Die FormData-Oberfläche ist ziemlich neu, wird aber von Browsern gut unterstützt. Es ist eine großartige Möglichkeit, diese Datenerfassung zu erstellen, um die tatsächlichen Werte des Formulars zu ermitteln. Ohne sie müssen Sie alle Elemente (z. B. mit
form.elements
) durchlaufen und herausfinden, was überprüft wurde, was nicht, welche Werte usw. sind. Völlig möglich, wenn Sie alte Browserunterstützung benötigen, aber die FormData Schnittstelle ist einfacher.Ich verwende hier ES6 ... keineswegs erforderlich. Ändern Sie es daher wieder in ES5-kompatibel, wenn Sie Unterstützung für alte Browser benötigen.
quelle
formData.entries()
.formData.foo
ist undefiniert. Wie aus Ihrer Antwort hervorgeht,.get()
muss für das gerufen werden, was ich für unpraktisch halte. Vielleicht ist "nicht aussetzen" auf die falsche Weise gekommen. Um so etwas wie{ foo: 'bar' }
aus einemsubmit
Ereignis zu generieren , müssen Sie diese manuell durchlaufen. Daher die. To get a plain object from it, see [link]
.xhr.send(formData);
JSON.stringify([...formData])
Oder, wenn Sie möchten, dass Ihre Schlüssel / Werte getrennt werden ...[...formData].reduce((prev, cur) => { prev[cur[0]] = cur[1]; return prev;}, {})
Verwenden Sie .serializeArray (), um die Daten im Array-Format abzurufen und anschließend in ein Objekt zu konvertieren:
quelle
<input type="checkbox" name="someList" value="one" /> <input type="checkbox" name="someList" value="two" />
. Wenn beide aktiviert sind, enthält das Objekt nur den zweiten Kontrollkästchenwert.someList
sollte seintype="radio"
?name:value
Hier ist eine wirklich einfache und kurze Lösung, für die Jquery nicht einmal erforderlich ist.
quelle
postData
.Es ist 2019 und es gibt einen besseren Weg, dies zu tun:
oder wenn Sie stattdessen ein einfaches Objekt möchten
Beachten Sie jedoch, dass dies nicht mit doppelten Schlüsseln funktioniert, wie Sie sie von Mehrfachauswahl- und doppelten Kontrollkästchen mit demselben Namen erhalten.
quelle
document.getElementsByClassName
eine for-Schleife verwenden musste, aber hey, immer noch schöner, als jQuery usw. zu benötigendocument.querySelector
statt nur lesenquerySelector
.quelle
Ich benutze das:
jQuery Plugin
HTML-Formular
Holen Sie sich die Daten
quelle
Array
Ansonsten möchten Sie sich vielleicht serialize () ansehen .
quelle
Hier ist eine funktionierende JavaScript-Implementierung, die Kontrollkästchen, Optionsfelder und Schieberegler korrekt verarbeitet (wahrscheinlich auch andere Eingabetypen, aber ich habe nur diese getestet).
Arbeitsbeispiel:
bearbeiten:
Wenn Sie nach einer vollständigeren Implementierung suchen, schauen Sie sich diesen Abschnitt des Projekts an, für das ich dies gemacht habe . Ich werde diese Frage irgendwann mit der vollständigen Lösung aktualisieren, die ich mir ausgedacht habe, aber vielleicht ist dies für jemanden hilfreich.
quelle
Wenn Sie jQuery verwenden, finden Sie hier eine kleine Funktion, die genau das tut, wonach Sie suchen.
Fügen Sie Ihrem Formular zunächst eine ID hinzu (es sei denn, es ist das einzige Formular auf der Seite, dann können Sie einfach 'Formular' als Dom-Abfrage verwenden).
Die Ausgabe würde folgendermaßen aussehen:
quelle
Sie können auch die FormData- Objekte verwenden. Mit dem FormData-Objekt können Sie eine Reihe von Schlüssel / Wert-Paaren kompilieren, die mit XMLHttpRequest gesendet werden sollen. Es ist in erster Linie für das Senden von Formulardaten vorgesehen, kann jedoch unabhängig von Formularen verwendet werden, um verschlüsselte Daten zu übertragen.
quelle
Dadurch werden alle Formularfelder an das JavaScript-Objekt "res" angehängt:
quelle
Ich habe die Antwort beigefügt, um auch das gewünschte Objekt zurückzugeben.
quelle
foo[bar][] = 'qux'
sollte zu serialisieren{ foo: { bar: [ 'qux' ] } }
.Basierend auf der Antwort von Neuront habe ich eine einfache JQuery-Methode erstellt, die die Formulardaten in Schlüssel-Wert-Paaren abruft, aber für Mehrfachauswahl und für Array-Eingaben mit name = 'example []' funktioniert.
So wird es verwendet:
Nachfolgend finden Sie ein Beispiel für die Definition und Funktionsweise.
quelle
quelle
quelle
Mit dieser Funktion können Sie ein Objekt oder einen JSON aus dem Formular haben.
zur Verwendung:
quelle
Ich habe eine Bibliothek geschrieben, um genau dieses Problem zu lösen: JSONForms . Es nimmt eine Form an, geht jede Eingabe durch und erstellt ein JSON-Objekt, das Sie leicht lesen können.
Angenommen, Sie haben das folgende Formular:
Wenn Sie das Formular an die Codierungsmethode von JSONForms übergeben, erhalten Sie das folgende Objekt zurück:
Hier ist eine Demo mit Ihrem Formular.
quelle
Codepen
quelle
Für diejenigen unter Ihnen, die eine
Object
im Gegensatz zu einer serialisierten Zeichenfolge bevorzugen (wie die von zurückgegebene$(form).serialize()
und eine leichte Verbesserung$(form).serializeArray()
), können Sie den folgenden Code verwenden:Um es auszuführen, verwenden Sie einfach
Form.serialize(form)
und die Funktion gibt eineObject
ähnliche zurück:Als Bonus bedeutet dies, dass Sie nicht das gesamte jQuery-Paket nur für eine Serialisierungsfunktion installieren müssen.
quelle
Ich habe eine Funktion geschrieben, die sich um mehrere Kontrollkästchen und mehrere Auswahlen kümmert. In diesen Fällen wird ein Array zurückgegeben.
quelle
Anzeigen von Formulareingabeelementfeldern und Eingabedatei zum Senden Ihres Formulars ohne Seitenaktualisierung und Abrufen aller Werte mit darin enthaltener Datei
quelle
Es wird das Problem behoben: Es konnte nicht mit Mehrfachauswahl gearbeitet werden.
quelle
Sie sind alle nicht ganz richtig. Sie können nicht schreiben:
Denn auf diese Weise werden bei einer Mehrfachauswahlliste die Werte mit der letzten überschrieben, da sie wie folgt übertragen werden: "param1": "value1", "param1": "value2".
Der richtige Ansatz ist also:
quelle
Diese Methode sollte es tun. Es serialisiert die Formulardaten und konvertiert sie dann in ein Objekt. Kümmert sich auch um Gruppen von Kontrollkästchen.
quelle
name
Attribut gemeinsam nutzen.Hier ist eine nette Vanilla JS-Funktion, die ich geschrieben habe, um Formulardaten als Objekt zu extrahieren. Es bietet auch Optionen zum Einfügen von Ergänzungen in das Objekt und zum Löschen der Formulareingabefelder.
Hier ist ein Beispiel für die Verwendung mit einer Post-Anfrage:
quelle