J'ai un formulaire avec de nombreux champs de saisie.
Lorsque j'attrape l'événement d'envoi de formulaire avec jQuery, est-il possible d'obtenir tous les champs d'entrée de ce formulaire dans un tableau associatif?
javascript
jquery
Vasil
la source
la source
Réponses:
Grâce à l'astuce de Simon_Weaver, voici une autre façon de le faire, en utilisant
serializeArray
:Notez que cet extrait échouera sur les
<select multiple>
éléments.Il semble que les nouvelles entrées de formulaire HTML 5 ne fonctionnent pas avec
serializeArray
jQuery version 1.3. Cela fonctionne dans la version 1.4+la source
name
etvalue
. Une meilleure solution pourrait être de traiter la sortie de serializeArray dans le format requis.<select>
éléments? J'ai essayévar $inputs = $('#new-ticket :input, :select');
mais ça ne marche pas. Est-ce que quelqu'un connaît la bonne façon de le faire parce que je ne pense pas que je fais ça correctement.$("#new-ticket :input, #new-ticket :select")
, ou mieux encore,$(":input, :select", "#new-ticket")
Tard à la fête sur cette question, mais c'est encore plus simple:
la source
.serialize()
( api.jquery.com/serialize ) place tous les éléments du formulaire dans une seule chaîne prête à être ajoutée à une URL dans une chaîne de requête, imitant essentiellement une demande de formulaire GET. Cela n'accomplirait pas ce que la réponse de nickf accomplit..serialize()
fonctionne également sur les éléments de formulaire uniquement. Sera donc$('form select').serialize()
sérialiser les données uniquement pour les sélections.$('#myForm')
, utilisez $ (this).Le plugin jquery.form peut aider avec ce que les autres recherchent qui se retrouvent sur cette question. Je ne sais pas s'il fait directement ce que vous voulez ou non.
Il existe également la fonction serializeArray .
la source
Parfois, je trouve qu'il est plus utile d'en obtenir un à la fois. Pour cela, il y a ceci:
la source
[0].value
à cela, c'est-à-dire$(...)[0].value;
m'a donné la valeur de l'entrée directement, merci!La variable elements contiendra toutes les entrées, sélections, zones de texte et ensembles de champs du formulaire.
la source
Voici une autre solution, de cette façon, vous pouvez récupérer toutes les données sur le formulaire et l'utiliser dans un appel côté serveur ou quelque chose.
Vous pouvez ensuite l'utiliser avec des appels ajax:
J'espère que cela vous sera utile :)
la source
J'ai eu un problème similaire avec une légère torsion et j'ai pensé que j'allais le jeter. J'ai une fonction de rappel qui récupère le formulaire, donc j'avais déjà un objet de formulaire et je ne pouvais pas facilement des variantes
$('form:input')
. Au lieu de cela, j'ai trouvé:C'est une situation similaire mais pas identique, mais j'ai trouvé ce fil très utile et j'ai pensé que je mettrais cela au bout et j'espère que quelqu'un d'autre l'a trouvé utile.
la source
Associatif? Non sans quelques travaux, mais vous pouvez utiliser des sélecteurs génériques:
la source
jQuery
serializeArray
n'inclut pas les champs désactivés, donc si vous en avez besoin aussi, essayez:la source
http://api.jquery.com/serializearray/
Cela peut également être fait sans jQuery à l'aide de l'objet FormData XMLHttpRequest niveau 2
http://www.w3.org/TR/2010/WD-XMLHttpRequest2-20100907/#the-formdata-interface
la source
N'oubliez pas les cases à cocher et les boutons radio -
la source
Ce morceau de code fonctionnera à la place du nom, email entrez le nom de vos champs de formulaire
la source
Semble étrange que personne n'ait voté ou proposé une solution concise pour obtenir les données de la liste. Presque aucune forme ne sera un objet à une dimension.
L'inconvénient de cette solution est, bien sûr, que vos objets singleton vont devoir être accessibles à l'index [0]. Mais l'OMI est bien meilleur que d'utiliser l'une des solutions de cartographie de la douzaine de lignes.
la source
J'ai eu le même problème et je l'ai résolu d'une manière différente.
Il renvoie la valeur de tous les champs d'entrée. Vous pouvez modifier le
$(':input')
pour être plus précis.la source
Même solution que celle donnée par nickf , mais avec les noms d'entrée de tableau pris en compte par exemple
<input type="text" name="array[]" />
la source
Si vous devez obtenir plusieurs valeurs à partir des entrées et que vous utilisez [] pour définir les entrées avec plusieurs valeurs, vous pouvez utiliser ce qui suit:
la source
Inspiré par les réponses de Lance Rushing et Simon_Weaver , c'est ma solution préférée.
La sortie est un tableau d'objets, par exemple
Avec le code ci-dessous,
sa sortie finale serait
la source
J'utilise ce code sans chaque boucle:
la source
J'espère que cela est utile, ainsi que le plus simple.
la source
Lorsque j'ai eu besoin de faire un appel ajax avec tous les champs du formulaire, j'ai eu des problèmes avec : le sélecteur d' entrée renvoyant toutes les cases à cocher, qu'elles aient été cochées ou non. J'ai ajouté un nouveau sélecteur pour simplement obtenir les éléments de formulaire soumis:
usage:
Je ne l'ai pas encore testé avec plusieurs cases de sélection, mais cela fonctionne pour obtenir tous les champs du formulaire comme le ferait une soumission standard.
Je l'ai utilisé lors de la personnalisation des options du produit sur un site OpenCart pour inclure des cases à cocher et des champs de texte ainsi que le type de boîte de sélection standard.
la source
serialize () est la meilleure méthode. @ Christopher Parker dit que la réponse de Nickf accomplit plus, mais elle ne tient pas compte du fait que le formulaire peut contenir une zone de texte et des menus sélectionnés. Il est de loin préférable d'utiliser serialize () puis de le manipuler comme vous le souhaitez. Les données de serialize () peuvent être utilisées dans une publication Ajax ou get, il n'y a donc aucun problème.
la source
J'espère que cela aide quelqu'un. :)
la source
Toutes les réponses sont bonnes, mais s'il y a un champ que vous aimez ignorer dans cette fonction? Facile, donnez au champ une propriété, par exemple ignore_this:
Et dans votre fonction de sérialisation:
C'est ainsi que vous ignorez certains champs.
la source
$('.mandatory');
et!$('.mandatory');
ignore_this
audata-ignore-this="true"
lieu de créer vos propres attributs qui ne valident pas le w3cEssayez le code suivant:
la source
Pour plusieurs éléments de sélection (
<select multiple="multiple">
), j'ai modifié la solution de @Jason Norwood-Young pour la faire fonctionner.La réponse (telle que publiée) ne prend que la valeur du premier élément qui a été sélectionné, pas tous . Il n'a pas non plus initialisé ni retourné
data
, le premier lançant une erreur JavaScript.Voici la nouvelle version:
Usage:
Remarque: Il vous suffit de vous assurer que le
name
de votre sélection a été[]
ajouté à la fin de celui-ci, par exemple:la source
la source