formulaire de sérialiser javascript (pas de cadre)
Demandais est-il une fonction en javascript sans jquery ou tout cadre qui me permet de sérialiser la forme et l'accès à la version sérialisée?
- Pour répondre à la question, non.
- Qu'entendez-vous par "accès à sérialiser version"? J'ai développé un script qui n'a pas de 3ème partie de dépendances qui peut convertir le formulaire HTML dans un JSON comme l'objet qui est multidimensionnelle: github.com/serbanghita/formToObject - s'il aide à déposer une réponse
Vous devez vous connecter pour publier un commentaire.
La miniature de-sérialiser bibliothèque ne repose pas sur un cadre. Autre que quelque chose comme cela, vous aurez besoin de mettre en œuvre la fonction de sérialisation vous-même. (bien qu'à un poids de 1,2 kilo-octets, pourquoi ne pas l'utiliser?)
case 'email':
dans la section d'entrée du codeThat's an error
Ici est pur JavaScript approche:
Bien qu'il semble être le fait de travailler uniquement pour les requêtes POST.
https://developer.mozilla.org/en-US/docs/Web/API/FormData
.entries()
même méthode ne fonctionne pas dans IE11!req.open("POST", "<your-url>");
avantreq.send(data);
Sinon, j'ai eu l'erreurInvalidStateError: XMLHttpRequest state must be OPENED.
sur Firefox 66. Il devrait travailler avec d'autres demandes aime aussi METTRE est vous remplacez POST avec METTRE.Pour les navigateurs modernes seulement
Si vous ciblez les navigateurs qui prennent en charge les
URLSearchParams
API (la plupart des navigateurs récents) etFormData(formElement)
constructeur (la plupart des navigateurs récents à l'exception de Bord), utilisez ceci:Partout sauf IE
Pour les navigateurs qui prennent en charge
URLSearchParams
mais pas leFormData(formElement)
constructeur, l'utilisation cette FormData polyfill et ce code (qui fonctionne partout sauf IE):Exemple
JS:
CSS:
HTML:
Compatible avec IE 10
Même pour les anciens navigateurs (par exemple, IE 10), utilisez la FormData polyfill, un
Array.from
polyfill, si nécessaire, et ce code:.toString()
vraiment nécessaire ici?URLSearchParams
, alors oui. Conversion de chaîne de caractères arrive aussi implicitement que si vous interpoler ou l'ajouter à une chaîne de caractères, auquel cas l'explicitetoString
appel n'est pas nécessaire.new FormData(formElement)
n'est pas pris en charge il y a encore?Source: http://code.google.com/p/form-serialize/source/browse/trunk/serialize-0.1.js
Voici une version légèrement modifiée de TibTibs':
Désactivé les champs sont abandonnés et les noms sont également codées dans l'URL. Regex pour remplacer des %20 caractères a lieu qu'une fois, avant de retourner à la chaîne.
La chaîne de requête est sous une forme identique au résultat de jQuery $.méthode de serialize ().
form.nodeName.toLowerCase() == "form"
au lieu deform.nodeName == "FORM"
J'ai commencé avec la réponse de Johndave Decano.
Cela devrait résoudre quelques des questions mentionnées dans les réponses à sa fonction.
soumettre le formulaire.
même chose quel que soit les types de champ. Pour ne pas mentionner
incompatibilité avec HTML5 types de champs tels que 'tel' et 'email',
donc j'ai enlevé la plupart des détails avec les instructions de commutation.
Types de bouton sera toujours ignorées si elles n'ont pas une valeur de nom.
C'est de cette façon je suis actuellement en utilisant cette fonction.
Si vous devez soumettre le formulaire "myForm" à l'aide de POST au format json que vous pouvez faire:
La deuxième ligne convertit à partir d'un tableau, par exemple:
...en un objet, comme:
...il fait la conversion en passant par mapFn dans le Tableau.à partir de(). Cette mapFn est appliquée à chaque ["a","b"] paire et les convertit en {"a": "b"}, de sorte que le tableau contient beaucoup d'objets avec seulement une propriété dans chaque. Le mapFn est à l'aide de "déstructuration" pour obtenir des noms de la première et de la deuxième parties de la paire, et il est également à l'aide d'un ES6 "ComputedPropertyName" pour définir le nom de la propriété dans l'objet retourné par la mapFn (c'est pourquoi, il est dit "[x]: quelque chose" plutôt que simplement "x: quelque chose".
L'ensemble de ces propriétés d'objets sont ensuite passés en arguments de l'Objet.assign() fonction qui fusionne toutes les propriétés d'objets dans un objet unique qui a toutes les propriétés.
Tableau.à partir():
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from
Déstructuration des paramètres:
https://simonsmith.io/destructuring-objects-as-function-parameters-in-es6/
Plus sur la propriété calculée noms ici:
Variable comme nom de propriété dans un objet JavaScript littérale?
Fonctionne dans tous les navigateurs.
JS:
HTML:
Si vous êtes à la recherche pour sérialiser les entrées sur un événement. Voici un pur JavaScript approche que j'utilise.
De données sera un objet JavaScript à l'une des entrées.
Une version remaniée de @SimonSteinberger du code en utilisant moins de variables et de profiter de la vitesse de
forEach
boucles (qui sont un peu plus vite quefor
s)À utiliser comme ceci:
J'espère que j'ai aidé.
J'ai refait TibTibs réponse dans quelque chose qui est beaucoup plus clair à lire. Il est un peu plus long car de la de 80 caractères de largeur et de quelques commentaires.
En outre, il ignore vide noms de champ et les valeurs vides.
evt = evt || window.event || { target: null };
(comme modifier l'a fait) Le point derrière, c'est pour transmettre l'événement qui a déclenché la sérialisation, si il y en a un, comme une forme de "soumettre" de l'événement, ou d'un bouton "click". Si un formulaire a plusieurs boutons de soumission, vous ne voulez prendre en compte la valeur du bouton qui a déclenché l'événement et ignorer les autres. J'ai bidouillé un très rudimentaire exemple de ce comportement sur dump.bedmonds.net/serialize-jsJ'ai attrapé les entrées() la méthode de formData de @moison réponse et à partir de MDN il est dit que :
mais le seul problème est que le navigateur mobile (android et safari ne sont pas pris en charge ) et IE et Safari bureau trop
mais, fondamentalement, voici ma démarche :
le code peut être trouvé ici
À l'aide de JavaScript réduire la fonction doit faire un truc pour tous les navigateurs, y compris IE9 >:
Live exemple ci-dessous.
JS:
HTML:
Des fins de débogage, ce qui pourrait vous aider:
J'espère que cela va fonctionner
Je pourrais être fou, mais je suis à la recherche de ces réponses sérieusement gonflé. Voici ma solution
select
, et tous les