Bonjour à tous,

Voilà mon problème.
J'ai la structure de suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
<script type="text/javascript">
<!--
 
code js 
 
//-->
</script>
 
<form class="formulaire_resa" name="reservation" id="reservation" METHOD='POST' ACTION="<? echo 'Reservation.php' ; ?> " onsubmit="return ValidationSaisie()">
 
code php/html pour le formulaire
 
</form>
Mon soucis est le suivant :
Mon formulaire est constitué d'un tableau dont le nombre de lignes est variable et donc par conséquent le nombre de champs à vérifier.

Pour simplifier disons que ce tableau a 3 colonnes : date, montant et compte_bancaire.
les champs dates et montant sont matérialisés par un champ texte, et les champs relatifs au compte_bancaire par une liste déroulante.

Je dois vérifier que :
La somme des montants (A) est égal à un montant B.
Les champs compte_bancaire ne peuvent pas avoir la valeur select c'est à dire la valeur 0.

Je ne vois pas comment implémenter ma fonction ValidationSaisie() sachant que :

j'ai déjà une fonction verifRepartitionEC() qui vérifie que la somme de mes montant (A) est bien égal à un un montant B . Si non, elle met en rouge le monant B. Cette fonction parcoure le tableau d'où l'utilisation d'une boucle.


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
function verifRepartitionEC(){
var somme_echeance_client =0;
for (k=1; k< nbLignesEcheanceClient+1; k++) 
	{
	var temp1=document.getElementById("montant_ec"+k).value;
			temp1 = temp1.deformatage_nombre();
			if(!isNaN(temp1) && (temp1!="")) somme_echeance_client = somme_echeance_client + parseFloat(temp1);
 
		}
	if (somme_echeance_client != montant_total)
		{
								document.getElementById("Total_Echeance_Client").className='total_input_erreur_rouge';
			return false;
		}
		else 
		{	document.getElementById("Total_Echeance_Client").className='total_input_bleufonce';
		return true;
		}	
}
Par ailleurs voici ma fonction ValidationSaisie()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
function ValidationSaisie() {
 
	frm=document.forms['reservation'];
 
	//verifRepartitionEC();
 
	for (k=1; k< nbLignesEcheanceClient+1; k++) 
		{
			var valeur_compte=document.getElementById("compte_bancaire_paiement_client"+k);
 
			if (valeur_compte.value =='0') {
			//frm.elements['devise_locale'].style.backgroundColor='#FFCC66';
			return false;
			exit;
			}
 
			else {
			return true;
			}
 
		}
 
}
Si cette fonction se résume à :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
function ValidationSaisie() {
 
	 return verifRepartitionEC();
 
}
Tout baigne. Si ma somme A est différente de mon montant B, le formulaire n'est pas validé.

Maintenant si je souhaite valider que tous mes champs compte bancaires sont renseignés avec le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
function ValidationSaisie() {
 
	for (k=1; k< nbLignesEcheanceClient+1; k++) 
		{
var valeur_compte=document.getElementById("compte_bancaire_paiement_client"+k);
 
			if (valeur_compte.value =='0') {
 
			return false;
			}
 
			else {
			return true;
			}
 
		}
 
}
cela ne fonctionne pas. Pour que le formulaire ne soit pas valider il faut que le premier champ soit sur select (valeur = 0)



j'ai trouvé une solution mais elle ne me convient pas.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 
function ValidationSaisie() {
 
	var somme_erreur ='';
 
	// Validation total écheance
	var somme_echeance_client =0;
 
	for (k=1; k< nbLignesEcheanceClient+1; k++) 
		{
			var temp1=document.getElementById("montant_ec"+k).value;
			temp1 = temp1.deformatage_nombre();
			if(!isNaN(temp1) && (temp1!="")) somme_echeance_client = somme_echeance_client + parseFloat(temp1);
 
		}
	if (somme_echeance_client != montant_total)
		{
		somme_erreur ='divergence_echeance';
		}
 
 
 
 
	// Validation de saise des comptes bancaires 
	for (k=1; k< nbLignesEcheanceClient+1; k++) 
		{
			var valeur_compte=document.getElementById("compte_bancaire_paiement_client"+k);
 
			if (valeur_compte.value =='0') {
			//frm.elements['devise_locale'].style.backgroundColor='#FFCC66';
			somme_erreur = somme_erreur + 'erreur';
 
			}	
		}
 
	if (somme_erreur != '')
	{
	return false
	}	
 
}
Pourquoi ?

Cette fonction reprend une partie de code déjà existant par ailleurs.
En espérant d'abord avoir exprimer correctement cette problématique, votre aide me sera précieuse.

par avance merci