Page 1 sur 1
traiter éléments en boucle
Posté : 10 déc. 2007, 17:41
par Invité
Bonjour,
J'ai un formulaire nommé monForm.
Pour donner une valeur par défaut à un champ de monForm, je fais:
var f = document.monForm;
f.champ1.value="ggg";
ça marche très bien. Maintenant je veux mettre tous les noms de champs à traiter dans un array pour leur attribuer la valeur par défaut en une seule fois. Je fais
var f = document.monForm;
les_champs = new Array('champ1','champ2','champ3','champ4');
for (i in les_champs)
{
f.les_champs[i].value = "ggg";
}
Et là je reçois une erreur comme quoi les champs n'ont aucune propriété. voyez vous ce qui manquerait dans ce code?
Posté : 10 déc. 2007, 17:53
par Sedril
Posté : 10 déc. 2007, 17:55
par h0_noMan
Quel type de champs a tu à remplir (INPUT,TEXTAREA,SELECT,...) ?
Donnes nous le code HTML des champs que tu souhaites remplir.
Posté : 10 déc. 2007, 18:05
par Invité
ben c'est des champs de texte tout simples comme ceci:
<input type="text" name="champ1" />
Je sais qu'on peut utiliser getelementbyid ou getelementsbyname.
Cependant je souhaite comprendre pourquoi ma syntaxe marche pour un champ de texte mais pas dans la boucle.
Posté : 10 déc. 2007, 18:11
par h0_noMan
// Fonctionne car champ1 fait bien parti de form
f.champ1.value="ggg";
// Ne fonctionne pas car les_champs[i] ne fait pas parti de form
// les_champs[i] n'est pas interpreté et donc il ne sera pas remplacer par sa valeur.
f.les_champs[i].value = "ggg";
Donc si tu veux acceder a des champs dont le nom est dans un tableau resouds toi a utiliser document.getElementByID()
Posté : 10 déc. 2007, 18:11
par Invité
Sedril, j'ai tenté ta suggesion, ça ne fonctionne pas. j'ai essayé séparément la boucle for, puis ta syntaxe d'attribution de valeur, puis les 2 en même temps.
Pour l'attribution des valeurs, il me semble que les_champs.value ="ggg" est plus correct que les_champs="ggg", non?
Posté : 10 déc. 2007, 18:13
par Ryle
C'est parce que javascript autorise certaines syntaxes, mais ne permet pas de les rendre dynamiques... la syntaxe document.nom_formulaire.nom_champ est autorisé, mais sémantiquement, elle n'est pas correcte, il faudrait faire document.forms['nom_formulaire'].elements['nom_champ'] pour accéder à l'élément du formulaire de la page.
Quand tu fais "f.les_champs
.value", il ne remplace pas les_champs par sa valeur pour évaluer ensuite la chaine. En revanche f.element[les_champs].value devrait fonctionner 
Edit : A noter que tu peux également faire directement un tableau d'objets :
var f = document.monForm;
les_champs = new Array(f.champ1,f.champ2,f.champ3,f.champ4);
Tu pourras ainsi utiliser les_champs
.value, dans la mesure ou les_champs retournera alors non pas une chaine mais un objet 
Posté : 10 déc. 2007, 18:26
par Invité
wow, chuis bluffé par ton truc objet là, ça marche trop bien, c magique.
Merci bcp!
Posté : 10 déc. 2007, 23:44
par Berzemus
Juste un peu hs, mais je viens d'y penser, mais il me semble qu'on peut créer des tableaux aussi comme ceci en JS:
var f = document.monForm;
les_champs =[f.champ1,f.champ2,f.champ3,f.champ4];
j'ai mis ça quelque part aujourd'hui.. j'y ais plus pensé, n'ayant pas vu de message d'erreur, ça a dû marcher
