Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/03/2011, 14h30   #1
Invité de passage
 
Inscription : juillet 2008
Messages : 40
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 40
Points : 2
Points : 2
Par défaut récupération des valeurs d'un input généré dynamiquement

Bonjour à tous,
J'ai un problème avec un code JavaScript et j'espère trouver la solution ici.
J'explique un peu ce que je veux faire:
Je veux générer automatiquement un formulaire. en fait je recupère les ligne d'une table par SELECT puis j'affiche toute les ligne et je créer en même temps un champ de type input pour chaque ligne. Je stock aussi le nombre de lignes de ma requète dans une variable que j'ai appelé $nbre_elt
Ensuite je voudrais faire des calcul avec les valeurs qui seront saisies dans ces champs. Mon problème c'est la récupération de ces valeurs avec JavaScript pour les calcul.

Voici mon code php :
Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
$sql = mysql_query("SELECT * FROM element_salaire,revenu_employe");
 
$nbre_elt = mysql_num_rows($sql);
 
$i=0;
 
	while ($i<$nbre_elt && $result = mysql_fetch_array($sql) )
	{
		echo '<tr>'; 
		echo '<td colspan="2">'.$result['nom_element'].'</td>';
		echo '<td colspan="2"><input  type ="text" name ="montant_'.$i.'" ></td>';
		echo '</tr>';
		echo '<input value="'.$nbre_elt.'" type="hidden" name="nbre_elt" >';
		$i++;
	}
jusqu'ici tout va bien

voici le code JavaScript qui me pose problème:

Code js :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
 
somme = 0;
for (i =0; i<nbre_elt; i++)
	{   
		champ = 'montant_'+[i];
 
		valeur = document.formul.champ.value;
 
		somme = parseInt(somme)+parseInt(valeur);
 
// formul est le nom de mon formulaire		
 
	}

Mon problème c'est que je reçoit l'erreur suivante: document.formul.champ is undefined

Quelle erreur ai-je commise dans mon code? MERCI pour votre reponse.
patheo2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 14h40   #2
Membre Expert
 
Avatar de Loceka
 
Tlouye Ci
Inscription : mars 2004
Messages : 1 450
Détails du profil
Informations personnelles :
Nom : Tlouye Ci

Informations forums :
Inscription : mars 2004
Messages : 1 450
Points : 2 149
Points : 2 149
Tu ne peux pas accéder comme tu le fais, c'est à dire en passant par les propriétés javascript.

Quand tu écris "document.formul.champ.value" il va chercher l'input avec le name "champ" car ta variable "champ" n'a pas d'incidence sur cette notation-là.

Le plus simple à mon avis est de tout faire en dom :
Code :
var valeur = document.getElementsByName(champ)[0].value;
Loceka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 15h18   #3
Invité de passage
 
Inscription : juillet 2008
Messages : 40
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 40
Points : 2
Points : 2
En effet, marche. merci beaucoup.
Mais j'aimerai comprendre un peu le [0] que tu asmis après le champ.
Par ailleurs j'ai ajouté return somme; au code mais quand je fais alert(somme) rien ne se passe et je n'ai pas de message d'erreur non plus

Voicile nouveau code js:
Code js :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
function calcul()
{
somme = 0;
 
for (i =0; i<nbre_elt; i++)
	{   
		champ = 'montant_'+[i];
 
		valeur = document.getElementsByName(champ)[0].value;
 
		somme = parseInt(somme)+parseInt(valeur);
 
               return somme;	
 
	}
 
alert(somme);
 
}
patheo2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 15h49   #4
Membre Expert
 
Avatar de Loceka
 
Tlouye Ci
Inscription : mars 2004
Messages : 1 450
Détails du profil
Informations personnelles :
Nom : Tlouye Ci

Informations forums :
Inscription : mars 2004
Messages : 1 450
Points : 2 149
Points : 2 149
La fonction getElementsByName() retourne une liste d'éléments (tous ceux qui on pour name la chaîne passée en argument). Dans ton cas le name est unique donc le [0] récupère le premier et unique élément.

Sinon tu fais ton alert() après le return donc tu ne peux pas l'atteindre. D'ailleurs faire ton return dans la boucle for est une très mauvaise idée car ta boucle ne terminera pas : il ne sera fait qu'une seule itération.
Loceka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 16h07   #5
Invité de passage
 
Inscription : juillet 2008
Messages : 40
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 40
Points : 2
Points : 2
Merci pour les explications.
J'ai pris en compte tes remarques (j'ai mis le return en dehors de le boucle for et ca marche bien.
Encore Merci
patheo2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h04.


 
 
 
 
Partenaires

Hébergement Web