Sie fragen sich, ob es in Javascript eine Funktion ohne JQuery oder ein Framework gibt, mit der ich das Formular serialisieren und auf die serialisierte Version zugreifen kann?
javascript
forms
serialization
RussellHarrower
quelle
quelle
Antworten:
Die Miniaturbibliothek aus der Serialisierung basiert nicht auf einem Framework. Abgesehen davon müssen Sie die Serialisierungsfunktion selbst implementieren. (obwohl bei einem Gewicht von 1,2 Kilobyte, warum nicht verwenden?)
quelle
case 'email':
in dem Eingabeabschnitt der CodeThat's an error
Hier ist ein reiner JavaScript-Ansatz:
Obwohl es nur für POST-Anfragen zu funktionieren scheint.
https://developer.mozilla.org/en-US/docs/Web/API/FormData
quelle
req.open("POST", "<your-url>");
bevorreq.send(data);
Ansonsten hatte ich den FehlerInvalidStateError: XMLHttpRequest state must be OPENED.
auf Firefox 66. Es sollte auch mit anderen Anforderungen arbeiten wie PUT Sie POST mit PUT ersetzen.Nur für moderne Browser
Wenn Sie auf Browser abzielen, die die
URLSearchParams
API ( neueste Browser ) und denFormData(formElement)
Konstruktor ( neueste Browser außer Edge ) unterstützen, verwenden Sie Folgendes:Überall außer IE
Verwenden Sie für Browser, die
URLSearchParams
denFormData(formElement)
Konstruktor unterstützen, aber nicht den Konstruktor, diese FormData-Polyfüllung und diesen Code (funktioniert überall außer im Internet Explorer ):Beispiel
Code-Snippet anzeigen
Kompatibel mit IE 10
Verwenden Sie für noch ältere Browser (z. B. IE 10) die FormData-Polyfüllung ,
Array.from
ggf. eine Polyfüllung , und diesen Code:quelle
.toString()
das hier wirklich notwendig?URLSearchParams
, dann ja. Die Konvertierung von Zeichenfolgen erfolgt implizit auch, wenn Sie sie interpolieren oder zu einer Zeichenfolge hinzufügen. In diesem Fall ist der explizitetoString
Aufruf nicht erforderlich.new FormData(formElement)
wird dort noch nicht unterstützt?Quelle: http://code.google.com/p/form-serialize/source/browse/trunk/serialize-0.1.js
quelle
Hier ist eine leicht modifizierte Version von TibTibs:
Deaktivierte Felder werden verworfen und Namen werden auch URL-codiert. Die Regex-Ersetzung von% 20 Zeichen erfolgt nur einmal, bevor die Zeichenfolge zurückgegeben wird.
Die Abfragezeichenfolge hat dieselbe Form wie das Ergebnis der $ .serialize () -Methode von jQuery.
quelle
form.nodeName.toLowerCase() == "form"
anstelle vonform.nodeName == "FORM"
Ich begann mit der Antwort von Johndave Decano.
Dies sollte einige der Probleme beheben, die in den Antworten auf seine Funktion erwähnt wurden.
Schaltflächentypen werden weiterhin ignoriert, wenn sie keinen Namenswert haben.
So benutze ich derzeit diese Funktion.
quelle
Wenn Sie das Formular "myForm" mit POST im JSON-Format senden müssen, haben Sie folgende Möglichkeiten:
Die zweite Zeile konvertiert aus einem Array wie:
... in ein reguläres Objekt, wie:
... führt diese Konvertierung durch, indem ein mapFn an Array.from () übergeben wird. Diese mapFn wird auf jedes ["a", "b"] Paar angewendet und konvertiert sie in {"a": "b"}, sodass das Array viele Objekte mit jeweils nur einer Eigenschaft enthält. MapFn verwendet "destructuring", um Namen des ersten und zweiten Teils des Paares abzurufen, und es verwendet auch einen ES6 "ComputedPropertyName", um den Eigenschaftsnamen in dem von mapFn zurückgegebenen Objekt festzulegen (aus diesem Grund heißt es "[] x]: etwas "statt nur" x: etwas ".
Alle diese Objekte mit einzelnen Eigenschaften werden dann an Argumente der Funktion Object.assign () übergeben, mit der alle Objekte mit einzelnen Eigenschaften zu einem einzigen Objekt mit allen Eigenschaften zusammengeführt werden.
Array.from (): https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from
Destrukturierung in Parametern: https://simonsmith.io/destructuring-objects-as-function-parameters-in-es6/
Mehr zu berechneten Eigenschaftsnamen hier: Variable als Eigenschaftsname in einem JavaScript-Objektliteral?
quelle
Funktioniert in allen Browsern.
quelle
So verwenden:
Ich hoffe ich habe geholfen.
quelle
Wenn Sie die Eingaben für ein Ereignis serialisieren möchten. Hier ist ein reiner JavaScript-Ansatz, den ich verwende.
Daten sind ein JavaScript-Objekt der Eingaben.
quelle
Eine überarbeitete Version von @ SimonSteinbergers Code, die weniger Variablen verwendet und die Geschwindigkeit von
forEach
Schleifen nutzt (die etwas schneller alsfor
s sind)quelle
Ich habe TibTibs Antwort in etwas umgestaltet, das viel klarer zu lesen ist. Aufgrund der Breite von 80 Zeichen und einiger Kommentare ist es etwas länger.
Außerdem werden leere Feldnamen und leere Werte ignoriert.
quelle
evt = evt || window.event || { target: null };
(wie bei der Bearbeitung). Der Punkt dahinter besteht darin, das Ereignis zu übergeben, das die Serialisierung ausgelöst hat, falls es eines gibt, wie z. B. ein Formular "Submit" -Ereignis oder "Klick" einer Schaltfläche. Wenn ein Formular mehrere Schaltflächen zum Senden enthält, möchten Sie nur den Wert der Schaltfläche berücksichtigen, die das Ereignis ausgelöst hat, und die anderen ignorieren. Ich habe ein sehr rudimentäres Beispiel für dieses Verhalten auf dump.bedmonds.net/serialize-jsquelle
Ich habe die Einträge () -Methode von Formulardaten aus @moison Antwort gepackt und von MDN es wird gesagt , dass:
Das einzige Problem ist jedoch, dass der mobile Browser (Android und Safari werden nicht unterstützt) sowie der IE und der Safari-Desktop ebenfalls vorhanden sind
aber im Grunde ist hier mein Ansatz:
Den Code finden Sie hier
quelle
Die Verwendung der JavaScript-Reduzierungsfunktion sollte für alle Browser, einschließlich IE9>, einen Trick darstellen:
Live Beispiel unten.
Code-Snippet anzeigen
quelle
Ich hoffe das wird funktionieren
quelle
Die Antwort von David Lemon verbessern.
Dadurch werden Formulardaten in JSON konvertiert und Sie können das Formular aus einem Datenobjekt festlegen.
quelle
Dies könnte durch eine sehr einfache Funktion wie folgt erfolgen
quelle
Hier ist ein reiner JavaScript-Ansatz:
quelle
quelle
Für Debugging-Zwecke kann dies hilfreich sein:
quelle
Ich könnte verrückt sein, aber ich finde diese Antworten ernsthaft aufgebläht. Hier ist meine Lösung
quelle
select
alle fehl