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 dans un formulaire


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 77
    Par défaut calcul dans un formulaire
    Bonjour je désire effectuer un formulaire de calcul ( sans recharger la page) et je n'y arrive pas.....
    Ca ne se calcule pas :

    Voici le formulaire en question :

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
      <HTML>
      <HEAD>
      <META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=iso-8859-1">
      <TITLE>Bon de commande DIVION</TITLE>
     <SCRIPT LANGUAGE="JavaScript">
      <!--
     
        function test_champ(champ) {
          expr_reg = /^\d*$/ ;
          // Ci-dessus : expression régulière qui match 0,1 ou plusieurs chiffres ;
          // de cette façon on vérifie que l'utilisateur entre bien un nombre entier
          if ( expr_reg.test(champ.value) ) {
            // c'est bien un nombre entier
            calcul_form() ;
          } else {
            // ce n'est pas un nombre entier
            alert ("Ce n'est par un nombre entier !") ;
            document.form1.elements[champ.name].value = "" ;   // on efface la valeur entrée erronée
            calcul_form() ;
          }
        }
     
        function calcul_form() {
          // le with ci-dessous permet d'abréger "document.forms.form1.p1.value" en "p1.value"
          with (document.forms.form1) {
            p1.value = q1.value * pu1.value ;
            p2.value = q2.value * pu2.value ;
            p3.value = q3.value * pu3.value ;
            total.value = p1.value *1 + p2.value *1 + p3.value *1 ;
               // Ai mis les *1 ci-dessus afin que les + fassent une somme arithmétique
               // et non pas une concaténation de chaînes de caractères
          }
        }
     
        function champ_verrouille(champ,valeur) {
               // Remarque : en HTML 4.0, il existe un attribut "read-only" pour la
               //            balise <INPUT TYPE=text> qui interdira de modifier un champ
               //            mais ce que je fais ci-dessous est beaucoup plus sûr !!!
          // alert ("Ce champ de peut pas être modifié !") ;
          document.form1.elements[champ.name].value = valeur ;   // on remet "valeur" initiale dans champ
        }
     
        function soumettre_form() {
          if ( document.forms.form1.total.value == 0 ) {
            alert ("Vous n'avez rien commandé !\n => commande non soumise") ;
            return false ;
          } else {
            // Les 2 lignes ci-dessous devraient être activées pour réellement passer le form. à script CGI
            // document.form1.method = "POST" ;
            // document.form1.action = "http://dgrwww.epfl.ch/cgi-bin/uncgi/mail_form.sh?mailto=Jean-Daniel.Bonjour@epfl.ch" ;
            document.write ("<H3 ALIGN=center>Commande passée\n pour un montant de " +
                             document.forms.form1.total.value + " Frs</H3>") ;
            document.close () ;
            return true ;
          }
        }
     
      // -->
      </SCRIPT>
      </HEAD>
      <BODY BGCOLOR="white" onLoad="calcul_form()" >
     
     
     
    <table width="100%">
    <!--utilisation d'un tableau qui occupera toute la page-->
    	<tr>
    		<td>
    		<table width="100%" align="center" border=1>
    			<tr>
    			<td align="center">
    			VILLE DE DIVION<BR>
    			1, rue Pasteur<BR>
    			BP9<BR>
    			Tel : 0321645570<BR>
    			Fax : 0321645583<BR>
    			Mel : <a href="mailto:contact@ville-divion.fr">contact@ville-divion.fr</a><BR>
    			Mel : <a href="mailto:achatpublic@ville-divion.fr">achatpublic@ville-divion.fr</a><BR>
    			</td>
     
     
    				<td align="center">		
    <FORM>
    Nom du fournisseur :
    <INPUT TYPE="text" NAME="nom" VALUE="" SIZE="20" MAXLENGth="20">
    <BR>
    Adresse du fournisseur :
    <INPUT TYPE="text" NAME="nom" VALUE="" SIZE="20" MAXLENGTH="20">
    <BR>
    Ville :
    <INPUT TYPE="text" NAME="nom" VALUE="" SIZE="20" MAXLENGTH="20">
    <BR>
    FAX :
    <INPUT TYPE="text" NAME="nom" VALUE="" SIZE="20" MAXLENGTH="20">
    <BR>
    LIEU DE LIVRAISON
    <SELECT NAME="LIEU"
    <OPTION VALUE="st">Service technique
    <OPTION SELECTED VALUE="m">Mairie
    <OPTION VALUE="elc">Education Loisirs et Citoyenneté
    </SELECT>
     
    				</td>
    		<td align="center">
     
    	<?php
     	echo "Date du jour : ".date("d-m-Y")."<br>";
    //affiche la date du jour d'utilisation du serveur par le client
    ?>	
    <BR>Action</BR>
    <INPUT TYPE="checkbox" NAME="Livraison"> Livraison
    <INPUT TYPE="checkbox" NAME="Retrait"> Retrait
    <INPUT TYPE="checkbox" NAME="Autre"> Autre
    <INPUT TYPE="checkbox" NAME="Transmission" CHECKED> Transmettre au fournisseur		
    		</td>
    <tr>
    <td colspan=4 align="center">
     
    Ne seront reconnus par le Ville de Divion que les services faits en exécution d’un bon de commande régulier dûment numéroté, visé et signé par le responsable achat											
    </td>
    </tr>
    <TABLE width="100%" BORDER="1" CELLSPACING="0" BGCOLOR="#FFFFAA">
      <TR BGCOLOR="#CCCCCC">
    	<TD WIDTH=70%><B>Réference fournisseur et désignation</B>
        <TH >Quantité
        <TH>Prix unitaire TTC
        <TH>Prix total TTC
    	</TR>
    <TH><INPUT TYPE="text" size="125">	
    <TH><INPUT TYPE="text" NAME="q1" SIZE=3 MAXLENGTH=4 onBlur="test_champ(this)">
    <TH><INPUT TYPE="text" NAME="pu1" SIZE=3 VALUE="" MAXLENGTH=4 ">
    <TH><INPUT TYPE="text" NAME="p1" SIZE=8 MAXLENGTH=4>
     
     
     
     
     
     
     
    </BODY>
    Merci d'avance

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Bonjour,
    les .value sont de type "caractère".

    Pour faire des calculs, il faut les convertir avec parseInt() ou parseFloat().

    A+

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 77
    Par défaut
    Merci mais peux tu m'en dire plus...
    Car la j'ai changé un peu mon code et ca fonctionne ca me calcule mes résultats.
    Il y avait aussi une erreur de nom du formulaire

    Mais ton astuce m'intéresse...

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 77
    Par défaut
    Tout compte fait ca ne fonctionne pas, je vais les convertir, peux tu me dire l'astuce..

    Merci d'avance

  5. #5
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par chegerg Voir le message
    peux tu me dire l'astuce..
    Ce n'est pas une "astuce", juste le fonctionnement "normal" de JavaScript.
    Un exemple dans ton code, en supposant que la quantité est un entier, et le prix un réel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p1.value = parseInt(q1.value, 10) * parseFloat(pu1.value, 10) ;
    Le second paramètre (10) doit être conservé afin d'éviter un bug connu (en gros, sans, il ne convertirait pas forcément en base 10, ce qui réserve des surprises).

    A+

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 77
    Par défaut
    Merci ca fonctionne , mais comment puis je faire pour que cela se recharge automatiquement la page pour que l'utilisateur n'a pas besoin de faire F5, car la ca ne change que quand la quantité change, j'ai essayé mais rien y fait.

    De plus j'espere pas trop en demander, peux tu m'orienter vers un calcul de TVA
    a 5.5 % et 19,6 %, c'est a dire l'utilisateur coche une des deux TVA et cela s'applique au calcul, tout en ayant une trace du prix HT.

    J'espère avoir été clair

    Merci d'avance....

  7. #7
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par chegerg Voir le message
    Merci ca fonctionne , mais comment puis je faire pour que cela se recharge automatiquement la page pour que l'utilisateur n'a pas besoin de faire F5, car la ca ne change que quand la quantité change, j'ai essayé mais rien y fait.
    Il suffit d'appeler la fonction sur onchange des input text "quantité" et "prix" (mais normalement, le 2°, pas besoin )

    Pour les calculs de pourcentage ... je sais plus en quelle classe on apprend ça
    Trop loin pour moi (y a une histoire de multiplication par la valeur et de division par 100, non ?)

    A+

  8. #8
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 77
    Par défaut
    tu m'as eu et je vais essayer de faire la fonction...
    Je reviens d'ici pour te montrer l'évolution.

  9. #9
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 77
    Par défaut
    Je cherche toujours......
    Comment puis je faire avec un select de TVA à 5.5 % et 19.6 %
    et que selon le taux appliqué cela se calcule automatiquement, je ne parle pas de la formule pour le calcul

  10. #10
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 77
    Par défaut
    Ca avance mais c'est pas encore ça :

    var pourCentTva = 0.196;

    function calcul(obj)
    {
    var valeur = parseInt(obj.options[obj.selectedIndex].value, 10);
    if (valeur == '#')
    return;

    var p1 = parseFloat(obj.form.p1.value);
    if (valeur)
    {
    var tva = Math.round(p1 * pourCentTva * 100) / 100;
    var ttc = p1 + tva;
    }
    else
    {
    var tva = 0.055;
    var ttc = ht;
    }
    obj.form.tva.value = tva;
    obj.form.ttc.value = ttc;
    }
    Comment faire en sorte pour qu'il prenne en compte la TVA à 5.5 %
    J'ai eesyé de faire une deuxièma variable mais il y a un truc que je dois pas comprendre.

    <TH><select name="select" onchange="calcul(this)">
    <option value="#">-- Sélectionnez le type de TVA --</option>
    <option value="1">TVA à 19.6 %</option>
    <option value="">TVA à 5.5 %</option>
    <TH><input name="tva" type="text" value="" maxlength="30" />
    Je souhaite que lorsque je choisis la deuxième option cela se calcule aussi...
    mais pour l'instant n'est pris en compte que la TVA à 19.6 %

    Merci d'avance

  11. #11
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Faudrait peut être donner à tes options des value qui prennent en compte le taux choisi, non ?

    A+

  12. #12
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 77
    Par défaut
    Ouppss je met simplement 0.055 a value.

    Merci

  13. #13
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par chegerg Voir le message
    Ouppss je met simplement 0.055 a value.
    ... et 0.196 pour l'autre option

    Et du coup, tu peux enlever pourCentTva qui ne sert à rien

    A+

  14. #14
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 77
    Par défaut
    Ne tiens pas compte du message au dessus je m'embrouille un peu, cela fait longtemps que je ne programmais plus, mais ca fait du bien de s'y remettre.
    C'est bon j'ai trouvé :

    var pourCentTva = 0.196;
    var pourCentTva1 = 0.055;

    function calcul(obj)
    {
    var valeur = parseInt(obj.options[obj.selectedIndex].value, 10);
    if (valeur == '#')
    return;

    var p1 = parseFloat(obj.form.p1.value);
    if (valeur=="1")
    {
    var tva = Math.round(p1 * pourCentTva * 100) / 100;
    var ttc = p1 + tva;
    }
    else if (valeur=="0")
    {
    var tva = Math.round(p1 * pourCentTva1 * 100) / 100;
    var ttc = p1 + tva;
    }
    else
    {
    var tva = 0;
    var ttc = p1 ;
    }
    obj.form.tva.value = tva;
    obj.form.ttc.value = ttc;

  15. #15
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 77
    Par défaut
    Je n'avais pas vu ta réponse je vais essayer comme tu as dit, cela optimisera mon code.

  16. #16
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 77
    Par défaut
    Je ne vois pas comment enlever PourCentTva..........

    Merci encore de ton aide mais je pense encore revenir....

  17. #17
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Dans ta fonction, à chaque fois qu'il apparait, remplace le par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    parseFloat(obj.value, 10)
    A+

  18. #18
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 77
    Par défaut
    Que me conseille tu est ce que je peux laisser mon code tel quel ou dois je vraiment supprimer le PourCentTva

  19. #19
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 77
    Par défaut
    Merci ça fonctionne mais peux tu m'expliquer l'intérêt de ne pas déclarer de variable.

    Grace a ton aide mon projet commence a voir le jour.
    Pour faire un tableau avec plusieurs ligne dois je faire a chaque fois des TH avec des input ou y a t'il un moyen plus rapide, m'oriente vers les array.

  20. #20
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par chegerg Voir le message
    Merci ça fonctionne mais peux tu m'expliquer l'intérêt de ne pas déclarer de variable.
    Peux-tu m'expliquer l'intérêt de conserver ta variable, dans la mesure où le taux est récupéré directement à partir du select (et passé en paramètre de ta fonction) ?

    Pour la suite, il s'agit d'une question purement HTML, à poser dans le forum approprié

    A+

Discussions similaires

  1. Calcul dans un formulaire
    Par mikaloop dans le forum Access
    Réponses: 4
    Dernier message: 18/04/2006, 15h24
  2. disparition des calculs dans un formulaire
    Par OBIWAN64 dans le forum Access
    Réponses: 6
    Dernier message: 24/03/2006, 12h05
  3. problème de calcul dans un formulaire
    Par Bray02 dans le forum IHM
    Réponses: 1
    Dernier message: 07/12/2005, 11h45
  4. Calculs dans sous-Formulaire
    Par Bernjean dans le forum Access
    Réponses: 5
    Dernier message: 17/11/2005, 18h29
  5. Pb champ calcule dans sous formulaire
    Par Brial dans le forum Access
    Réponses: 6
    Dernier message: 12/11/2005, 18h33

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