traiter éléments en boucle

Invité
Invité n'ayant pas de compte PHPfrance

10 déc. 2007, 17:41

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?

Eléphant du PHP | 73 Messages

10 déc. 2007, 17:53

tu devrais plutôt écrire

Code : Tout sélectionner

for(i=0;i<les_champs.length;i++) { les_champs[i] = "ggg"; }
Image Un bon maître a ce souci constant : enseigner à se passer de lui.

Eléphant du PHP | 445 Messages

10 déc. 2007, 17:55

Quel type de champs a tu à remplir (INPUT,TEXTAREA,SELECT,...) ?

Donnes nous le code HTML des champs que tu souhaites remplir.

Invité
Invité n'ayant pas de compte PHPfrance

10 déc. 2007, 18:05

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.

Eléphant du PHP | 445 Messages

10 déc. 2007, 18:11

// 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()

Invité
Invité n'ayant pas de compte PHPfrance

10 déc. 2007, 18:11

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?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

10 déc. 2007, 18:13

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 :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

10 déc. 2007, 18:26

wow, chuis bluffé par ton truc objet là, ça marche trop bien, c magique.

Merci bcp!

ViPHP
ViPHP | 4039 Messages

10 déc. 2007, 23:44

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 :)
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.