Je veux faire une boucle sur les éléments d'un formulaire HTML, et de stocker les valeurs de <input> dans les champs d'un objet. Le code suivant ne fonctionne pas, si:
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 de la 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 qu' 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?