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 automatique


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 196
    Par défaut calcul automatique
    Bonjour,

    J'ai besoin d'effectuer un calcul de tarifs dans mon formulaire (Chronoforms), avant de le soumettre.
    J'ai tenté 2 manières, bouton "calculer" et "onchange" sur les input... rien de se passe.
    J'ai 2 possibilités, soit je traite avec un individu, soit avec une entreprise (qui peut payer pour plusieurs individus).

    Voici le script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function calculer(nb)
    {
    m=document.getElementById("totalInsc").value;
    t=document.getElementById("tarif").value;
    a=document.getElementById("ajtMontant").value;
    d=document.getElementById("dedMontant").value);
    m=(t+a-d)*nb;
    }
    et le formulaire :
    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
    <table>
    <tr>
    <td><label class="cf_label" style="width: 100px;">Tarif de base</label></td>
    <td><input class="cf_inputbox" maxlength="150" size="10" title="" id="tarif" name="tarif" type="text" value="<?php echo $row["tarif"]; ?>" /></td>
    <td></td>
    </tr>
    <tr>
    <td><label class="cf_label" style="width: 100px;">Compl&eacute;ments (+)</label></td>
    <td><input class="cf_inputbox" maxlength="150" size="10" title="" id="ajtMontant" name="ajtMontant" type="text" value="0"/></td>
    <td><input class="cf_inputbox" maxlength="150" size="20" title="" name="libAjtMontant" type="text" /></td>
    </tr>
    <tr>
    <td><label class="cf_label" style="width: 100px;">D&eacute;ductions (-)</label></td>
    <td> <input class="cf_inputbox" maxlength="150" size="10" title="" id="dedMontant" name="dedMontant" type="text" value="0" /></td>
    <td><input class="cf_inputbox" maxlength="150" size="20" title="" name="libDedMontant" type="text" /></td>
    </tr>
    <?php if(!isset($_POST["idClient"])) {
    ?>
    <!-- ceci s'affiche s'il s'agit d'un individuel -->
    <tr>
    <td><label class="cf_label" style="width: 100px;">Total</label></td>
    <td><input class="cf_inputbox" maxlength="150" size="10" title="" id="totalInsc" name="totalInsc" type="text"  value="<?php echo $row["tarif"]; ?>"/></td>
    <td><input value="Calculer" name="calculer" type="button" onclick="calculer(1)" /></td>
    </tr>
    <?php } else { ?>
    <!-- ceci s'affiche s'il s'agit d'un client, susceptible de financer plusieurs individus -->
    <tr>
    <td><label class="cf_label" style="width: 100px;">Total</label></td>
    <td><input class="cf_inputbox" maxlength="150" size="10" title="" id="totalInsc" name="totalInsc" type="text" value="<?php $tarif=$row["tarif"]*$nb; echo number_format($tarif, 2, '.', ' '); ?>"/></td>
    <td><input value="Calculer" name="calculer" type="button" onclick="<?php echo 'calculer('.$nb.')';?>" /></td>
    </tr>
    <?php } ?>
    </table>

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 196
    Par défaut
    En désespoir de cause j'essaye de faire mon calcul sur l'événement onclick...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onclick="this.value=(tarif.value+ajtMontant.value-dedMontant.value)*2;"
    Mais ça concatène : 100+20-10 me donne 20020 et encore si je rajoute les décimales ça foire avec un beau NaN !
    Je détèèèèèèste Javascript !

  3. #3
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Par défaut
    tu récupères des strings il faut donc les parser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var a = "10";
    var b = "25";
    alert(a+b);
    alert(parseInt(a)+parseInt(b));
    voila

  4. #4
    Membre très actif
    Inscrit en
    Janvier 2009
    Messages
    598
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 598
    Par défaut
    Effectivement comme le dit notre modo il faut utiliser le parseInt(chaine)

    Mais je poste plutôt pour ça :

    Je détèèèèèèste Javascript !
    Non ne dit pas ça Javascript c'est beau

    Et pour ça :

    Prend l'habitude de donner des noms de variables plus longs qu'un simple m, a, t, etc...
    Ton code sera plus compréhensible quand tu le reliras plus tard ou s'il sera maintenu par une autre personne un jour.
    Cela ne gênera pas tes formules^^

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 196
    Par défaut
    Citation Envoyé par dragonno Voir le message
    Non ne dit pas ça Javascript c'est beau
    Oui sans doute, mais il me donner beaucoup plus de fil à retordre que les langages auxquels je suis habituée !! Pas de messages d'erreur tout ça...


    Bon j'va tester et je reviens rendre compte !

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 196
    Par défaut
    Ca concaténait toujours, j'ai du jongler avec les parenthèses...et passer par un hidden field pour récupérer mon nombre de participants :
    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
       <?php } 
    /* ETAPE 3 et 4 : Calculer le total */
    ?>
    <div class="form_element cf_textbox">
    <label class="cf_label" style="width: 200px;">&nbsp;</label>
    <table>
    <tr>
    <td><label class="cf_label" style="width: 100px;">Tarif de base</label></td>
    <td><input class="cf_inputbox" maxlength="150" size="10" title="" id="tarif" name="tarif" type="text" value="<?php echo number_format($row["tarif"],0); ?>" /></td>
    <td></td>
    </tr>
    <tr>
    <td><label class="cf_label" style="width: 100px;">Compl&eacute;ments (+)</label></td>
    <td><input class="cf_inputbox" maxlength="150" size="10" title="" id="ajtMontant" name="ajtMontant" type="text" value="0" onchange="totalInsc.value=(parseInt(tarif.value)+parseInt(ajtMontant.value)-parseInt(dedMontant.value));"/></td>
    <td><input class="cf_inputbox" maxlength="150" size="20" title="" name="libAjtMontant" type="text" value="par auditeur" onClick="this.value='';"/></td>
    </tr>
    <tr>
    <td><label class="cf_label" style="width: 100px;">D&eacute;ductions (-)</label></td>
    <td> <input class="cf_inputbox" maxlength="150" size="10" title="" id="dedMontant" name="dedMontant" type="text" value="0" onchange="totalInsc.value=(parseInt(tarif.value)+parseInt(ajtMontant.value)-parseInt(dedMontant.value));" /></td>
    <td><input class="cf_inputbox" maxlength="150" size="20" title="" name="libDedMontant" type="text" value="par auditeur" onClick="this.value='';"/></td>
    </tr>
    <?php if(!isset($_POST["idClient"])) {
    ?>
    <tr>
    <td><label class="cf_label" style="width: 100px;">Total</label></td>
    <td><input class="cf_inputbox" maxlength="150" size="10" title="" id="totalInsc" name="totalInsc" type="text"  value="<?php echo number_format($row["tarif"],0); ?>"/></td>
    <td><input value="Calculer" name="calculer" type="button" onclick="totalInsc.value=(parseInt(tarif.value)+parseInt(ajtMontant.value)-parseInt(dedMontant.value));" /></td>
    </tr>
    <?php } else { ?>
    <tr>
    <td><label class="cf_label" style="width: 100px;">Total</label></td>
    <td><input class="cf_inputbox" maxlength="150" size="10" title="" id="totalInsc" name="totalInsc" type="text" onclick="totalInsc.value=((parseInt(tarif.value)+parseInt(ajtMontant.value))-parseInt(dedMontant.value))*parseInt(nb.value);"/></td>
    <td><input type="hidden" name="nb" value="<?php echo $nb;?>"/>
    <input value="Calculer" name="calculer" type="button" onClick="totalInsc.value=((parseInt(tarif.value)+parseInt(ajtMontant.value))-parseInt(dedMontant.value))*parseInt(nb.value);" /></td>
    </tr>
    <?php } ?>
    </table>
     
        </div>
    pfiouh ! que de boulot pour un simple calcul... mdr

    Merci pour le tuyau
    Je vais tenter de rajouter les décimales, j'ai cru comprendre que c'était parseFloat() qu'il fallait utiliser.

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

Discussions similaires

  1. Calcul automatique dans des tableaux
    Par fremsoi dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 12
    Dernier message: 01/06/2006, 17h58
  2. effectuer un calculs automatique??
    Par annajoul dans le forum Access
    Réponses: 1
    Dernier message: 30/05/2006, 10h41
  3. CEdit et calcul automatique d'une expression réelle
    Par youngkoolboy dans le forum MFC
    Réponses: 8
    Dernier message: 03/05/2006, 19h38
  4. [VBA-E] calculs automatique sur une seule feuille
    Par repié dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/03/2006, 11h53
  5. Faire des calculs automatiques en JavaScript
    Par yoyot dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 28/02/2005, 10h31

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