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 07/10/2011, 18h08   #1
Invité de passage
 
Inscription : septembre 2011
Messages : 14
Détails du profil
Informations forums :
Inscription : septembre 2011
Messages : 14
Points : 0
Points : 0
Par défaut Calcul d'un total selon les champs du formulaire

Bonjour,

J'ai un formulaire dans lequel il est nécessaire de faire le total : ce dernier calcule un chiffre après saisie dans le formulaire mais il est erroné ; de plus, je souhaiterais qu'à chaque champ saisi, il mette à jour ce total.
Pourriez vous m'apporter de l'aide, s'il vous plait ?
Merci.
Pierre

Code ci-joint.
Fichiers attachés
Type de fichier : html saisie_cotisations.html (8,0 Ko, 5 affichages)
pierre_gomes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2011, 08h21   #2
Membre Expert
 
Avatar de beegees
 
Homme David Vincent (l'homme qui a vu les extra-terrestres)
Développeur Web
Inscription : mars 2004
Messages : 3 240
Détails du profil
Informations personnelles :
Nom : Homme David Vincent (l'homme qui a vu les extra-terrestres)
Âge : 37
Localisation : Belgique

Informations professionnelles :
Activité : Développeur Web
Secteur : Enseignement

Informations forums :
Inscription : mars 2004
Messages : 3 240
Points : 1 048
Points : 1 048
Bonjour,

Tu as oublié une accolade ouvrante ici :

Code :
if (testInt(value5) && testInt(value6))
qui doit devenir :

Code :
1
2
if (testInt(value5) && testInt(value6)) 
{
Plusieurs remarques constructives :

- Indente ton code
- Evite de mélanger du code js dans de l'HTML, colle plutôt ton code js dans une page externe (.js), tu la lie ensuite à ton fichier html comme ceci :

Code :
1
2
<script type="text/javascript" src="TaPage.js"></script>
</head>
ta fonction sera disponible avant le chargement de ta page.

- Tu as un form qui ne pointe pas vers une action

Code :
<form method="post" name="calcul_cotisations">
Est-il vraiment nécessaire ce form ?

Je regarde le reste.

beegees

PS: pense à indenter ton code
__________________
beegees est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/10/2011, 10h21   #3
Invité de passage
 
Inscription : septembre 2011
Messages : 14
Détails du profil
Informations forums :
Inscription : septembre 2011
Messages : 14
Points : 0
Points : 0
Par défaut modification

Bonjour

J'ai pris pris en compte tes remarques ; indenter le code signifie d'utiliser l'expression text-indent ; c'est bien cela ; pour le post, c'est normal, je n'ai pas tout à fait fini, il pointera vers un fichier php. J'ai bien mis le code js dans un autre fichier mais j'ai toujours le même problème : mauvais calcul et le total ne se réactualise pas à champ changement de données.

Merci pour les précisions.
Pierre
pierre_gomes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2011, 12h27   #4
Membre régulier
 
Inscription : juillet 2004
Messages : 92
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 92
Points : 75
Points : 75
Salut juste une remarque sur ta fonction testInt qui me semble pas top.

Code :
1
2
3
4
 
function testInt(value) {
return value == parseInt(value);
}
Pour savoir le type d'un element javascript utilise typeof donc pour faire bien tu devrait juste faire :
Code :
1
2
3
4
5
6
7
8
 
function testInt(value) {
     if(typeof(value) == "numeric"){
          return parseInt(value);
     }else{
          alert("Les valeurs introduites ne sont pas des nombres");
     }
};
typeof s'applique sur des variables, objets, functions...
Pour la suite de ton problème j'ai pas tout saisit, a moins d'être plus explicite sur le problème je saisit pas trop ton programme d'autant plus que tu n'expose pas d'exemple de saisit donc trop vague et pas assez explicite.

Bonne chance
headmax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2011, 12h27   #5
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 573
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 573
Points : 4 075
Points : 4 075
Citation:
Envoyé par pierre_gomes Voir le message
indenter le code signifie d'utiliser l'expression text-indent ; c'est bien cela ;
Non, pas du tout ^^

Code non indenté :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Number.prototype.formater = function(decimales, sepDecimal, sepMilliers) {
var resultat = this.toFixed(decimales);
if (sepDecimal) resultat = resultat.replace(/\./, sepDecimal);
if (sepMilliers) {
var offset = 0;
var posPoint = resultat.indexOf((sepDecimal)?sepDecimal:".");
if (posPoint == -1)
posPoint = resultat.length;
while ((posPoint - offset) > 3) {
resultat = resultat.inserer(sepMilliers, (posPoint - offset - 3));
offset += 3;
}
}
return resultat;
}
Code indenté :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Number.prototype.formater = function(decimales, sepDecimal, sepMilliers) {
   var resultat = this.toFixed(decimales);
   if (sepDecimal) resultat = resultat.replace(/\./, sepDecimal);
   if (sepMilliers) {
      var offset = 0;
      var posPoint = resultat.indexOf((sepDecimal)?sepDecimal:".");
      if (posPoint == -1)
         posPoint = resultat.length;
      while ((posPoint - offset) > 3) {
         resultat = resultat.inserer(sepMilliers, (posPoint - offset - 3));
         offset += 3;
      }
   }
   return resultat;
}
Tu préfères lire lequel ?
---
(et pour ceux qui pensent que la lisibilité n'est pas importante... voici la version obfusquée... )
Code :
Number.prototype.formater=function(fkhtj,fkthj,ftkhj){var ftkhj=this.toFixed(fkhtj);if(fkthj)ftkhj=ftkhj.replace(/\./,fkthj);if(ftkhj){var tfkhj=0;var tfkjh=ftkhj.indexOf((fkthj)?fkthj:".");if(tfkjh==-1)tfkjh=ftkhj.length;while((tfkjh-tfkhj)>3){ftkhj=ftkhj.inserer(ftkhj,(tfkjh-tfkhj-3));tfkhj+=3;}}return ftkhj;}
__________________

...pour les linguistes et les curieux >>> générateur de phrases aléatoires

__________________
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2011, 12h30   #6
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 573
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 573
Points : 4 075
Points : 4 075
Citation:
Envoyé par headmax Voir le message
typeof s'applique sur des variables, objets, functions...
Mais typeof n'est pas une fonction, c'est un opérateur :
Code :
if (typeof machin == truc)
edit : au temps pour moi, les deux syntaxes sont possibles en fait ^^ (voir MDN)
__________________

...pour les linguistes et les curieux >>> générateur de phrases aléatoires

__________________
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2011, 15h06   #7
Invité de passage
 
Inscription : septembre 2011
Messages : 14
Détails du profil
Informations forums :
Inscription : septembre 2011
Messages : 14
Points : 0
Points : 0
Par défaut Pb calcul champ de formulaires

J'ai inséré les modifications préconisées ; cependant, lors de la saisie du formulaire, il ne me calcule plus rien : le programme dit que les valeurs que j'ai saisies ne sont pas des nombres.

Pour le problème du champ total des cotisations du formulaire : il devrait par exemple obtenir un montant de 480
car :
3 000 * 2/100 = 60
2 000 * 21/100 = 420

Merci
Piere
pierre_gomes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2011, 17h42   #8
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 573
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 573
Points : 4 075
Points : 4 075
La fonction de test n'était peut-être pas tout-à-fait idéale... mais il me semble que le remplacement par typeof n'est pas meilleur car les valeurs transmises sont des String provenant des input de la page, donc aucune ne sera de type numérique telle quelle. Ce qu'on veut tester, ce n'est pas si ce sont des nombres, mais si ce sont des chaines représentant des nombres... ^^

Code :
1
2
3
function testInt(value) {
return value === parseInt(value, 10).toString();
}
est tout-à-fait fonctionnel
__________________

...pour les linguistes et les curieux >>> générateur de phrases aléatoires

__________________
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2011, 18h36   #9
Invité de passage
 
Inscription : septembre 2011
Messages : 14
Détails du profil
Informations forums :
Inscription : septembre 2011
Messages : 14
Points : 0
Points : 0
Par défaut reponse

Merci pour ta réponse, je l'ai testée et cela fonctionne pour les 2 premières lignes mais j'ai toujours le problème du total qui ne fonctionne pas (mauvais calcul).

Merci encore pour tous ces efforts
Pierre
pierre_gomes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2011, 19h56   #10
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 573
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 573
Points : 4 075
Points : 4 075
Citation:
Envoyé par pierre_gomes Voir le message
J'ai inséré les modifications préconisées
Montre-nous l'état actuel de la page (son code) après les modifications suggérées (notamment l'accolade manquante et l'emplacement du script de la fonction somme)
__________________

...pour les linguistes et les curieux >>> générateur de phrases aléatoires

__________________
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2011, 10h12   #11
Invité de passage
 
Inscription : septembre 2011
Messages : 14
Détails du profil
Informations forums :
Inscription : septembre 2011
Messages : 14
Points : 0
Points : 0
Par défaut Code et script

Ci-joint le code de la page et le script correspondant à la somme.
Pierre
Merci
Fichiers attachés
Type de fichier : js calcul_cotisations.js (1,1 Ko, 2 affichages)
Type de fichier : html calcul_cotisations_4_fichier.html (7,1 Ko, 1 affichages)
pierre_gomes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2011, 11h05   #12
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 573
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 573
Points : 4 075
Points : 4 075
Ce n'est pas le calcul qui est mauvais, c'est que les valeurs de resultat et resultat_cg sont récupérés dans les variables value5 et value6 "trop tôt". Déplace les lignes qui récupèrent les valeurs en question juste avant leur mise à jour :
Code :
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
function somme() {
var total = document.getElementById('total_cotisations');
var result = document.getElementById('resultat');
var resultat = document.getElementById('resultat_cg');
var value1 = document.getElementById('base_at').value;
var value2 = (document.getElementById('at').value);
var value3 = document.getElementById('base_cg').value;
var value4 = document.getElementById('cg').value;
if (testInt(value1) && testInt(value2)) {
result.value = parseInt(value1) * parseInt(value2)/100;
} else {
alert('Les valeurs introduites ne sont pas des nombres');
}
if (testInt(value3) && testInt(value4)) {
resultat.value = parseInt(value3) * parseInt(value4)/100;
} else {
alert('Les valeurs introduites ne sont pas des nombres');
}
var value5 = document.getElementById('resultat_cg').value;
var value6= document.getElementById('resultat').value;
if (testInt(value5) && testInt(value6)) {
total.value = parseInt(value5) + parseInt(value6);
} else {
alert('Les valeurs introduites ne sont pas des nombres');
}
}
(mais c'est toujours illisible la fonction mériterait une bonne refactorisation )
__________________

...pour les linguistes et les curieux >>> générateur de phrases aléatoires

__________________
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/10/2011, 12h07   #13
Invité de passage
 
Inscription : septembre 2011
Messages : 14
Détails du profil
Informations forums :
Inscription : septembre 2011
Messages : 14
Points : 0
Points : 0
Par défaut Remerciements

Je vous remercie beaucoup de votre aide, je pourrais donc poursuivre mon projet
Merci
Merci

Pierre
pierre_gomes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2011, 20h18   #14
Membre Expert
 
Avatar de beegees
 
Homme David Vincent (l'homme qui a vu les extra-terrestres)
Développeur Web
Inscription : mars 2004
Messages : 3 240
Détails du profil
Informations personnelles :
Nom : Homme David Vincent (l'homme qui a vu les extra-terrestres)
Âge : 37
Localisation : Belgique

Informations professionnelles :
Activité : Développeur Web
Secteur : Enseignement

Informations forums :
Inscription : mars 2004
Messages : 3 240
Points : 1 048
Points : 1 048
Citation:
Envoyé par pierre_gomes Voir le message
Je vous remercie beaucoup de votre aide, je pourrais donc poursuivre mon projet
Merci
Merci

Pierre
Si ton problème est résolu, n'oublie pas le tag

Merci et bonne soirée.

beegees
__________________
beegees est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web