IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Calcul d'un total selon les champs du formulaire


Sujet :

JavaScript

  1. #1
    Membre averti
    Inscrit en
    Septembre 2011
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 20
    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 Fichiers attachés

  2. #2
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Bonjour,

    Tu as oublié une accolade ouvrante ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (testInt(value5) && testInt(value6))
    qui doit devenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    <form method="post" name="calcul_cotisations">
    Est-il vraiment nécessaire ce form ?

    Je regarde le reste.

    beegees

    PS: pense à indenter ton code

  3. #3
    Membre averti
    Inscrit en
    Septembre 2011
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 20
    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

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur Hospitalier
    Inscrit en
    Juillet 2004
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 993
    Billets dans le blog
    1
    Par défaut
    Salut juste une remarque sur ta fonction testInt qui me semble pas top.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  5. #5
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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;}

  6. #6
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    if (typeof machin == truc)
    edit : au temps pour moi, les deux syntaxes sont possibles en fait ^^ (voir MDN)

  7. #7
    Membre averti
    Inscrit en
    Septembre 2011
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 20
    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

  8. #8
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function testInt(value) {
    return value === parseInt(value, 10).toString();
    }
    est tout-à-fait fonctionnel

  9. #9
    Membre averti
    Inscrit en
    Septembre 2011
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 20
    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

  10. #10
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    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)

  11. #11
    Membre averti
    Inscrit en
    Septembre 2011
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 20
    Par défaut Code et script
    Ci-joint le code de la page et le script correspondant à la somme.
    Pierre
    Merci
    Fichiers attachés Fichiers attachés

  12. #12
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    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 : 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
    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 )

  13. #13
    Membre averti
    Inscrit en
    Septembre 2011
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 20
    Par défaut Remerciements
    Je vous remercie beaucoup de votre aide, je pourrais donc poursuivre mon projet
    Merci
    Merci

    Pierre

  14. #14
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calcul de la moyenne sans les champs vides
    Par roidurif dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 20/12/2013, 19h24
  2. Tri de table selon les champs qu'elle possède
    Par alexielle51 dans le forum SQL
    Réponses: 4
    Dernier message: 16/09/2010, 16h31
  3. Réponses: 0
    Dernier message: 30/03/2010, 20h07
  4. Calculer la somme de tous les champs texte
    Par Maroxye dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/06/2008, 14h32
  5. requete concatené selon les champ sont renseignés ou pas
    Par Damish dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 22/09/2006, 14h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo