Probleme sur formulaire

Résolu/Fermé
Orkaell Messages postés 28 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 19 octobre 2007 - 16 oct. 2007 à 16:02
 Orkaell - 1 nov. 2007 à 22:48
Bonjour,
J'ai un petit problème sur mon formulaire au niveau des calculs, comment faire pour que si le total de mon formulaire et inferieur a 60 on rajoute 5 au total
mais si le resultat est supérieur a 60 on garde le total de départ.

Je mets ce bout de code car le code intégral est très long.
 
function total_com()
{

tot = 0;

if (document.acheter2.totsaut.value != "") {
tot = tot + parseInt(document.acheter2.totsaut.value);
 }
 else
 { tot = tot;}
 tot= tot + acompte();
document.acheter2.acompte.value = 30*document.acheter2.nbsaut.value + acompte();
document.acheter2.solde.value = tot-30*document.acheter2.nbsaut.value-acompte();
return tot;
}

Si quelqu'un pouvait m'aider ça serait vraiment cool :)
Je vous remercie par avance :)

66 réponses

Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 921
16 oct. 2007 à 16:10
salut,

je te propose :
function total(val)
{
      if (Math.parseInt(val) > 60)
      {
            return parseInt(val) + 5;
      }
      else
      {
            return parseInt(val);
      }
}
0
Orkaell Messages postés 28 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 19 octobre 2007
16 oct. 2007 à 16:14
Salut :)

Merci de repondre aussi rapidement :)
J'essaye ça tout de suite
0
Orkaell Messages postés 28 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 19 octobre 2007
16 oct. 2007 à 16:18
J'ai incorporé ce bout de code dans mon script mais ça ne marche pas...
Faut-il l'ajouter tout simplement ou bien remplacer certaine fonction ? :-s
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 921
16 oct. 2007 à 16:37
non c'est une fonction toute bête qui ne fait qu'ajouter 5 à une valeur si elle dépasse 60.
il faut que tu l'appelles depuis l'endroit du code où tu as besoin de majorer ta valeur.
0

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

Posez votre question
Orkaell Messages postés 28 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 19 octobre 2007
16 oct. 2007 à 17:00
ça ne fonctionne pas :-/
Il doit y avoir certaine chose qui parasite, ou des termes differents pour le total et val.... ou peut etre que je l'ai mal inseré

Tu as une idée ? ou peux-tu m'en dire plus ?
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 921
16 oct. 2007 à 17:14
explique moi ta fonction.
je n'ai pas compris ce que tu fais ni d'où vienne les valeurs.
0
Orkaell Messages postés 28 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 19 octobre 2007
16 oct. 2007 à 17:20
c'est un formulaire de commande, chaque option a un prix, les prix sont cummulés puis calculés.
Mais si la commande et inferieure a 60€ le client paie des frais de port, donc dans ce cas là il faut rajouter 5€ a la totalité.

mon total et recuperé dans le bout de code que j'ai mis en debut de post je le remets ici
function total_com()
{
tot = 0;
if (document.acheter2.totsaut.value != "") {
tot = tot + parseInt(document.acheter2.totsaut.value);
 }
 else
 { tot = tot;}
 tot= tot + acompte();
document.acheter2.acompte.value = 30*document.acheter2.nbsaut.value + acompte();
document.acheter2.solde.value = tot-30*document.acheter2.nbsaut.value-acompte();
return tot;
}


donc je pense que les 5e doivent être rajouté là dedans... Mais je ne sais aps comment faire :-s
0
ilan27 Messages postés 394 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 15 juin 2009 36
16 oct. 2007 à 17:36
Bonsoir, c'est normal, la fonction qu'a proposée Mathieu est correcte, mais ne retourne pas ce qu'il faut: la fonction renvoie +5 si c'est superieur à 60, or si j'ai bien compris c'est le contraire...:
Je la reprends en corrigeant:

function total(val)
{
if (Math.parseInt(val) < 60)
{
return parseInt(val) + 5;
}
else
{
return parseInt(val);
}
}

Et tu dois appeler cette fonction:
tot=total(tot);
0
Orkaell Messages postés 28 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 19 octobre 2007
16 oct. 2007 à 17:51
Oui c'est bien le contraire qu'il faut :)

Mais le problème c'est que je ne sais pas ou et comment l'appeler cette fonction :-s
J'ai mis en place la fonction total(val)
mais comment l'appeler dans mon code ? :-s

je suis désolée mes connaissance en script sont tres limité... j'ai su modifier ce qu'il fallait mais rajouter une fonction, là je suis perdue :-/
0
ilan27 Messages postés 394 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 15 juin 2009 36
16 oct. 2007 à 18:01
Cette fonction arrondit, je ne sais pas pourquoi, sinon tu as celle la:

function total(val)
{
if (val > 60)
{
return (val + 5);
}
else
{
return val;
}
}

Tu dois insérer cette fonction en haut des autres (du moment qu'elle est avant l'instruction qui l'utilisera), et tu dois insérer "tot=total(tot);" je pense avant return tot; .
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 921
16 oct. 2007 à 18:03
le but du jeu n'était pas d'arrondir mais de transtyper au cas où la valeur saisie soit une chaine.
et merci pour la relecture !
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 921
16 oct. 2007 à 18:01
regarde ce que t'écris ilan27 !
Et tu dois appeler cette fonction:
tot=total(tot);


donc si tu veux ajouter les frais de port à la fin tu codes :
tot=total(tot);
return tot;

ou en une seule ligne :
return total(tot);
0
ilan27 Messages postés 394 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 15 juin 2009 36
16 oct. 2007 à 18:08
Oui, j'avais mal compris le vrai sens de ParseInt, il faut en effet le mettre. Mais pour la double instruction, j'ai trouvé ça plus clair pour comprendre le truc, mais après, on peut tout réduire en effet, dans ce cas je pense que ceci marche aussi:

function total(val){
return Math.parseInt(val)>60? Math.parseInt(val): (Math.parseInt(val)+5);
}
0
Orkaell Messages postés 28 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 19 octobre 2007
16 oct. 2007 à 18:23
WOW merci bcp ça fonctionne comme il faut !! :)))

Un grand merci à tout les 2 :)

J'aurais une autre question
dans mon total les centimes ne s'affichent pas... y a une soluce pour palier au problème ?
0
ilan27 Messages postés 394 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 15 juin 2009 36
16 oct. 2007 à 19:03
aaaaah, je le savais bien ;)
Essaye Math.parseDouble a la place de Math.parseInt
0
Orkaell Messages postés 28 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 19 octobre 2007
16 oct. 2007 à 19:39
hum.. je le mets ou ? :-))
0
ilan27 Messages postés 394 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 15 juin 2009 36
16 oct. 2007 à 19:51
A la place de ParseInt...:

function total(val)
{
if (Math.parseDouble(val) < 60)
{
return Math.parseDouble(val) + 5;
}
else
{
return Math.parseDouble(val);
}
}

Ca marche?
0
Orkaell Messages postés 28 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 19 octobre 2007
16 oct. 2007 à 20:04
J'ai mis ça donc dans mes codes :
function total(val)
{
if (val < 60)
{
return (val + 5);
}
else
{
return val;
}
} 

function total_com()
{
tot = 0;
if (document.acheter2.totsaut.value != "") {
tot = tot + parseInt(document.acheter2.totsaut.value);
 }
 else
 { tot = tot;}
 tot= total(tot) + acompte();
document.acheter2.acompte.value = 30*document.acheter2.nbsaut.value + acompte();
document.acheter2.solde.value = tot-30*document.acheter2.nbsaut.value-acompte();
return tot;
}

Et là la fonction des frais de port fonctionne nikel, en revanche je n'ai pas les centimes qui s'affichent, et si j'essaie ce que m'a donné Ilan ça ne fonctionne plus :-s
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 921
16 oct. 2007 à 20:06
si cela ne fonctionne pas :
function total(val)
{
	if (typeof(val) == 'number')
	{
		if (val < 60)
		{
			return val + 5;
		}
		return val;
		}
	return 0;
	}
} 

on se contente de tester le type, retourne '0' en cas de saisie incorrecte.
j'ai virer les 'else' (inutiles puisque 'return' est une sortie de fonction).
0
ilan27 Messages postés 394 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 15 juin 2009 36
16 oct. 2007 à 20:08
Essaye comme ceci, j'ai rajouté des ".0" pour dire: ce sont des réels, il faut donc afficher quelque chose après la virgule


function total(val)
{
if (val < 60)
{
return (val + 5.0);
}
else
{
return val;
}
}

function total_com()
{
tot = 0.0;
if (document.acheter2.totsaut.value != "") {
tot = tot + parseInt(document.acheter2.totsaut.value);
}
else
{ tot = tot;}
tot= total(tot) + acompte();
document.acheter2.acompte.value = 30*document.acheter2.nbsaut.value + acompte();
document.acheter2.solde.value = tot-30*document.acheter2.nbsaut.value-acompte();
return tot;
}
0
Orkaell Messages postés 28 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 19 octobre 2007
16 oct. 2007 à 20:24
J'ai essaye vos 2 proposition et ça ne fonctionne pas :-/

Dalida : si je remplace ta derniere proposition les totaux ne s'affichent plus

Ilan : si je mets se code là a la place de celui que j'ai ça ne change rien. Tjs pas de centimes
0