Vous pouvez le faire:
var fields = {};
$("#theForm").find(":input").each(function() {
// The selector will match buttons; if you want to filter
// them out, check `this.tagName` and `this.type`; see
// below
fields[this.name] = $(this).val();
});
var obj = {fields: fields}; // You said you wanted an object with a `fields` property, so...
Prenez garde que les formulaires peuvent avoir des champs avec des noms répétés, et ce que vous essayez de faire ne supporte pas cela. En outre, les champs des champs dans les formulaires HTML peuvent être significatifs. (Ce sont les deux raisons pour lesquelles serializeArray
fonctionne comme il le fait.)
Notez que la pratique HTML normale consiste à omettre les champs désactivés. Si vous voulez faire cela, vérifiez this.disabled
avant de saisir la valeur. Notez que ce qui précède (écrit il y a deux ans) utilise un pseudo-sélecteur jQuery. Je suis un peu surpris de constater que j'ai écrit ça. Comme il est dit dans le documentation for the :input
pseudo-selector, son utilisation signifie que jQuery ne peut pas transférer le sélecteur au navigateur natif querySelectorAll
(ce qui est le cas de presque tous les navigateurs).
Aujourd'hui, je serais probablement écrire:
$("#theForm").find("input, textarea, select, button")...
... si je voulais boutons, ou sinon,
$("#theForm").find("input, textarea, select")...
... puis filtrer sur input[type="button"]
et input[type="submit"]
à l'intérieur du each
. Par exemple.(Pas de boutons à tous):
$("#theForm").find("input, textarea, select").each(function() {
var inputType = this.tagName.toUpperCase() === "INPUT" && this.type.toUpperCase();
if (inputType !== "BUTTON" && inputType !== "SUBMIT") {
// ...include it, either it's an `input` with a different `type`
// or it's a `textarea` or a `select`...
}
});
Quelle est la mission? Qu'avez-vous l'intention de faire avec cet objet? – Canuteson
J'essaie de créer un script ajax qui valide les formulaires. et certains champs dépendent d'autres champs, donc j'envoie tout l'objet sur n'importe quel changement d'entrée ... – Alex