Javascript /calcul sur donné issu de formulai

Fermé
ABBA - 14 avril 2004 à 16:56
SirHill Messages postés 4060 Date d'inscription vendredi 19 mars 2004 Statut Contributeur Dernière intervention 19 avril 2020 - 17 avril 2004 à 00:26
Bonjour,

Sur une page web, je propose aux visiteurs de rentrer des données. Au moment où ces données sont envoyés vers la page suivante, je teste une fomule linéaire de ces données. (Préalablement je vérifie qu'aucune de ces données n'est nulle ou bien alors je lui donnela valeur 0.)
Mais cela marche pas. Il ne me retourne pas le message attendu lorsque mon opération est >9. Est-ce que quelqu'un peu me donner un coup de pouce ? Merci.

Voila le code :

<script language="JavaScript">
<!--
function testform(C1,C2,C3,C4)

{
if(C1.value=="") (C1.value=0)

if(C2.value=="") (C2.value=0)

if(C3.value=="") (C3.value=0)

if(C4.value=="") (C4.value=0)


if(C1+2*C2+3*C3+4*C4>9) {alert("Le total est trop élevé")
C1.focus(); return false }
return true
}
//-->
</script>

<form method="POST" action="pagesuivante.asp" onSubmit="return testform(this.C1,this.C2,this.C3,this.C4)">


MERCI DE VOTRE AIDE
A voir également:

5 réponses

Tu dois transformer les données de ton formulaire en chiffre je crois !
0
SirHill Messages postés 4060 Date d'inscription vendredi 19 mars 2004 Statut Contributeur Dernière intervention 19 avril 2020 543
15 avril 2004 à 03:55
Salut Abba,

Voici ton code corrigé:
<script language="JavaScript"> 
<!-- 
function testform(C1,C2,C3,C4) { 
	if (C1.value == "") (C1.value=0);
	if (C2.value == "") (C2.value=0);
	if (C3.value == "") (C3.value=0);
	if (C4.value == "") (C4.value=0);
	if ((C1.value) + 2 * (C2.value) + 3 * (C3.value) + 4 * (C4.value) > 9) {
		alert("Le total est trop élevé");
		C1.focus();
		return false;
		} 
return true;
} 
//--> 
</script> 

<form method="POST" action="http://www.monsite.com/pagesuivante.asp" onSubmit="return testform(this.C1,this.C2,this.C3,this.C4)">
<input type="text" name="C1"><br>
<input type="text" name="C2"><br>
<input type="text" name="C3"><br>
<input type="text" name="C4"><br>
<input name="bouton" type="submit" value="Valider">
</form>
Bon courage et @+
0
Bonjour SirHill,

Il ya un bug quelquepart dans le code car il me repond "le total est trop élevé dans presque tous les cas (sauf si tout est null ou a zéro ou par exemple égale à 0,1).
Je mets si dessous une copie du code réel qui me pose pb.
Merci encore de votre aide.

<script language="JavaScript">
<!--
function testform(RNbLTG,RNbLTF,RNbL4G,RNbL4F,RNbCs,RNbCd,RNbCt,RNbC4,RNbC5,RNbC6){
if(RNbLTG.value=="") (RNbLTG.value=0);
if(RNbLTF.value=="") (RNbLTF.value=0);
if(RNbL4G.value=="") (RNbL4G.value=0);
if(RNbL4F.value=="") (RNbL4F.value=0);
if(RNbCs.value=="") (RNbCs.value=0);
if(RNbCd.value=="") (RNbCd.value=0);
if(RNbCt.value=="") (RNbCt.value=0);
if(RNbC4.value=="") (RNbC4.value=0);
if(RNbC5.value=="") (RNbC5.value=0);
if(RNbC6.value=="") (RNbC6.value=0);
if((RNbLTG.value) + (RNbLTF.value) + (RNbL4G.value)+ (RNbL4F.value) + (RNbCs.value) + 2 * (RNbCd.value) + 3 * (RNbCt.value) + 4 * (RNbC4.value) + 5 * (RNbC5.value) + 6 * (RNbC6.value) >9) {alert("Vous êtes trop nombreux !");
RNbLTG.focus(); return false;
}
return true;
}
//-->
</script>

<form method="POST" action="r03.asp" onSubmit="return testform(this.RNbLTG,this.RNbLTF,this.RNbL4G,this.RNbL4F,this.RNbCs,this.RNbCd,this.RNbCt,this.RNbC4,this.RNbC5,this.RNbC6)">

<p>
<b>JE RÉSERVE UN OU PLUSIEURS <font color="#FF0000"> <u> LITS</u> </font> EN CHAMBRES A PARTAGER (NON MIXTES)<br>
</b><input type="text" name="RNbLTG" size="2"> lits en chambres triples pour garçons <br>
<input type="text" name="RNbLTF" size="2"> lits en chambres triples pour filles<br>
<input type="text" name="RNbL4G" size="2"> lits en chambres de 4 lits et plus pour garçons<br>
<input type="text" name="RNbL4F" size="2"> lits en chambres triples de 4 lits et plus pour filles</p>
<p>
<b>
JE RÉSERVE UNE OU PLUSIEURS <font color="#FF0000"> <u> CHAMBRES</u></font><br>
</b><br>
<input type="text" name="RNbCs" size="2"> chambres simples<br>
<input type="text" name="RNbCd" size="2"> chambres doubles <br>
<input type="text" name="RNbCt" size="2"> chambres triples<br>
<input type="text" name="RNbC4" size="2"> chambres de 4 lits <br>
<input type="text" name="RNbC5" size="2"> chambres de 5 lits
<br>
<input type="text" name="RNbC6" size="2"> chambres de 6 lits
</p>
<p><input type="submit" value="Suivant" name="BTOK"> (étape 2 sur 4)</p>
</form>
0
SirHill Messages postés 4060 Date d'inscription vendredi 19 mars 2004 Statut Contributeur Dernière intervention 19 avril 2020 543
16 avril 2004 à 01:15
Salut Abba,

Il ne s'agit pas d'un bug, c'est "normal" ;-) il faut revoir la fonction!
Le problème se situe à la ligne 14, quand le test a lieu:
if((RNbLTG.value) + (RNbLTF.value) + (RNbL4G.value)+ (RNbL4F.value) + (RNbCs.value) + 2 * (RNbCd.value) + 3 * (RNbCt.value) + 4 * (RNbC4.value) + 5 * (RNbC5.value) + 6 * (RNbC6.value) >9)

Pour que la condition soit remplie, il faut que toutes les valeurs soient égales à 0 ou négatives en considérant les entiers.
On va prendre des exemples:
* Toutes mes valeurs sont égales à 0:
si (( 0 + 0 + 0 + 0 + 0 + 2 * 0 + 3 * 0 + 4 * 0 + 5 * 0 + 6 * 0 ) > 9) : c'est faux (le total est égal à 0), la condition n'est pas remplie, le message d'alerte ne s'affiche pas.
* Mes valeurs sont négatives (c'est juste pour l'exemple):
si (( -3 + -2 + -7 + -1 + -4 + 2 * -1 + 3 * -8 + 4 * -1 + 5 * -8 + 6 * -7 ) > 9) : c'est faux (le total est égal à -129 dans cet exemple), la condition n'est pas remplie, le message d'alerte ne s'affiche pas.
* Mes valeurs sont positives (cas qui t'intéresse):
si (( 1 + 1 + 1 + 1 + 1 + 2 * 1 + 3 * 1 + 4 * 1 + 5 * 1 + 6 * 1 ) > 9) : c'est vrai (le total est égal à 25), la condition est remplie, le message d'alerte s'affiche.

Pour remédier à ce problème, il suffit de modifier la formule. Je ne sais pas ce que tu veux exactement, il faudrait savoir quelle est la valeur maximale pour chaque cas de figure! (Si tu as un problème, tu peux toujours me donner les valeurs maxi que tu souhaites avoir pour chaque entité, et je te donnerai la formule).
Autre chose, tu pourrais aussi faire apparaître un message d'erreur lorsque tous les champs sont nuls, du style "Veuillez réserver au moins une chambre!" :-)

Voilà, bon courage et tiens-moi au courant
@+
SirHill
0
Merci encore SirHill mais je persiste à douter de mon code car si par exemple je mets RnbLTF=1 et tout le reste à zéro, il m'affiche quand même le message "vous êtes trop nombreux" alors que 1<9 ! ;-)


Abba
0
Gimme gimme!!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SirHill Messages postés 4060 Date d'inscription vendredi 19 mars 2004 Statut Contributeur Dernière intervention 19 avril 2020 543
17 avril 2004 à 00:26
Salut Abba
J'ai trouvé le bug...
En prenant ton exemple (si par exemple je mets RnbLTF=1 et tout le reste à zéro), j'ai testé la valeur en sortie et ça me renvoie... 100000!
La formule concatène en fait les valeurs retournées. Pour y remédier, il faut convertir la chaîne renvoyée par chaque champ de texte, comme ceci:
http://www.toutjavascript.com/faq/index.php3?ID=56
Bon courage et tiens-moi au courant
@+
0

Discussions similaires