Boucle sur les éléments dans jQuery
Je veux faire une boucle sur les éléments d'un formulaire HTML, et de stocker les valeurs de la <input> les champs d'un objet. Le code suivant ne fonctionne pas, cependant:
function config() {
$("#frmMain").children().map(function() {
var child = $("this");
if (child.is(":checkbox"))
this[child.attr("name")] = child.attr("checked");
if (child.is(":radio, checked"))
this[child.attr("name")] = child.val();
if (child.is(":text"))
this[child.attr("name")] = child.val();
return null;
});
Ni le suivant (inspiré par jobscry réponse):
function config() {
$("#frmMain").children().each(function() {
var child = $("this");
alert(child.length);
if (child.is(":checkbox")) {
this[child.attr("name")] = child.attr("checked");
}
if (child.is(":radio, checked"))
this[child.attr("name")] = child.val();
if (child.is(":text"))
this[child.attr("name")] = child.val();
});
}
L'alerte indique toujours que child.length == 0
. En sélectionnant manuellement les éléments œuvres:
>>> $("#frmMain").enfants (les) Objet longueur=42 >>> $("#frmMain").les enfants().filtre ("case") Objet longueur=3
Tous les conseils sur la façon de faire la boucle correctement?
- Votre thread juste m'a sauvé 20 minutes de, ligne par ligne, les champs d'entrée pour de multiples formes -_-;. +1.
Vous devez vous connecter pour publier un commentaire.
ne pense pas que vous avez besoin de citations sur ce:
essayer:
jQuery a une excellente fonction pour la lecture en boucle par le biais d'un ensemble d'éléments: .chacun()
En fonction de ce que vous avez besoin de chaque enfant (si vous êtes à la recherche pour le poster quelque part via AJAX), vous pouvez simplement faire...
Il crée une chaîne de caractères pour vous, avec toutes les valeurs automatiquement.
Comme pour faire une boucle à travers les objets, vous pouvez aussi le faire.
J'ai utilisé les informations suivantes avant de:
C'est juste écrit à partir de la mémoire, donc susceptible de contenir des erreurs, mais cela devrait rendre un objet appelé
data
qui contient les valeurs pour toutes vos entrées.Note que vous avez à traiter avec des cases à cocher dans une manière spéciale, pour éviter d'obtenir les valeurs de décoché les cases à cocher. La même chose est probablement le cas de l'entrée radio.
Notez également l'utilisation des tableaux pour stocker les valeurs, comme pour une entrée de nom, vous pourriez avoir des valeurs à partir de plusieurs entrées (cases à cocher en particulier).
si vous souhaitez utiliser la fonction de chaque, il devrait ressembler à ceci:
Il suffit de passer l'accolade fermante pour fermer la parenthèse. Merci pour ça, jobscry, vous m'avez sauvé un certain temps.
jobscry
? C'est le même code, il a posté. C'est ce que les commentaires sont pour.pour moi tous ces n'a pas fonctionné. Ce qui a fonctionné pour moi était quelque chose de vraiment simple:
C'est la façon la plus simple de boucle par le biais d'un formulaire d'accéder uniquement les éléments du formulaire. À l'intérieur de chaque fonction, vous pouvez vérifier et de construire ce que vous voulez. Lors de la construction d'objets remarque que vous aurez envie de le déclarer à l'extérieur de la fonction de chaque.
MODIFIER
JSFIDDLE
Le ci-dessous
$('#formId input, select, textarea')
sera de retour tous lesinput
éléments dans la forme, avec chaque zone de select et textarea de la page.form[name=formname] input, select, textarea
signifie "tous lesinput
s dans le formulaire nomméformname
, en plus de tous lesselect
s, en plus de tous lestextarea
s". Vous pourriez être en mesure de dire$('input, select, textarea', 'form[name=formname]')
et de le faire travailler; j'oublie que jQuery vous permet de le faire ou le fait que vous utilisez un élément ou un objet jQuery en tant que contexte.