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 :

Javascript - devis dynamique - fonction de calcul


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 3
    Par défaut Javascript - devis dynamique - fonction de calcul
    Bonjour,
    Je débute en javascript et c'est ma première intervention sur un forum.
    J'ai un script qui effectue le calcul des options sélectionnées.
    Dans le cas des boutons radio, le montant du bouton précédemment sélectionné est retranché pour afficher le nouveau montant et cela fonctionne très bien avec un seul groupe de bouton radio.
    Le problème c'est que quand il y a plusieurs groupes de boutons radio, les montants sont annulé d'un groupe à l'autre alors qu'il faudrait ajouter les uns aux autres les montants sélectionnés de chacun des groupes de boutons radio.
    Avez-vous une idée ? Merci.

    Script en démonstration : http://devintersed.free.fr/index.php

    Script complet :
    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
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Devis</title>
    <script type="text/javascript">
    
    // Calculate the total for items in the form which are selected.
    function calculateTotal(inputItem)
    {
      with (inputItem.form)
      {    
        // Process each of the different input types in the form.
        if (inputItem.type == "radio")
        {    // Process radio buttons.       
            
            // Subtract the previously selected radio button value from the total.
              calculatedTotal.value = eval(calculatedTotal.value) - eval(previouslySelectedRadioButton.value);
    
              // Save the current radio selection value.
              previouslySelectedRadioButton.value = eval(inputItem.value);
    
              // Add the current radio button selection value to the total.
              calculatedTotal.value = eval(calculatedTotal.value) + eval(inputItem.value);
        }               
        
        else 
        {   // Process check boxes.
          if (inputItem.checked == false) 
          {   // Item was uncheck. Subtract item value from total.
              calculatedTotal.value = eval(calculatedTotal.value) - eval(inputItem.value);
          }
          
          else
          {   // Item was checked. Add the item value to the total.
              calculatedTotal.value = eval(calculatedTotal.value) + eval(inputItem.value);
          }
        }
    
        // Total value should never be less than 0.
        if (calculatedTotal.value < 0) {
          InitForm();
        }
    
        // Return total value.
        return(formatCurrency(calculatedTotal.value));
      }
    }
    
    // Format a value as currency.
    function formatCurrency(num) {
      num = num.toString().replace(/\$|\,/g,'');
      if(isNaN(num))
         num = "0";
      sign = (num == (num = Math.abs(num)));
      num = Math.floor(num*100+0.50000000001);
      cents = num%100;
      num = Math.floor(num/100).toString();
      if(cents<10)
          cents = "0" + cents;
      for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
          num = num.substring(0,num.length-(4*i+3)) + ',' + num.substring(num.length-(4*i+3));
      return (((sign)?'':'-') + '€' + num + '.' + cents);
    }
    
    // This function initialzes all the form elements to default values.
    function InitForm() {
      // Reset values on form.
      document.selectionForm.total.value='€0';
      document.selectionForm.calculatedTotal.value=0;
      document.selectionForm.previouslySelectedRadioButton.value=0;
    
      // Set all checkboxes and radio buttons on form to unchecked.
      for (i=0; i < document.selectionForm.elements.length; i++) {
        if (document.selectionForm.elements[i].type == 'checkbox' | document.selectionForm.elements[i].type == 'radio') {
          document.selectionForm.elements[i].checked = false;
        }
      }
    }
    </script>
    
    </head>
    <body onload="InitForm();" onreset="InitForm();">
    <div>
    <table><tr><td>
      <form method="POST" name="selectionForm">
        <b>Pizza</b><br>
        Petite €10.00
        <input type="checkbox" name="Steak"   value="10.00"  onclick="this.form.total.value=calculateTotal(this);">  
        Normal €12.00
        <input type="checkbox" name="Chicken" value="12.00" onclick="this.form.total.value=calculateTotal(this);">  
        Large €15.00
        <input type="checkbox" name="Sushi"   value="15.00"  onclick="this.form.total.value=calculateTotal(this);">
        <br><br>
    </td></tr></table></div>
    <div><table><tr><td>
        <b>Supplément :</b> <br>
          <input type="radio" name="Sauce" value="0.00" onclick="this.form.total.value=calculateTotal(this);"> Rien
        <br>
          <input type="radio" name="Sauce"   value="1.00" onclick="this.form.total.value=calculateTotal(this);"> + de fromage €1.00
        <br>
          <input type="radio" name="Sauce" value="2.00" onclick="this.form.total.value=calculateTotal(this);"> végétarien €2.00
        <br>
          <input type="radio" name="Sauce" value="3.00" onclick="this.form.total.value=calculateTotal(this);"> jambon €3.00
        <br>
        <br>
        <br>    
         <b>Services :</b> <br>
          <input type="radio" name="service" value="5.00" onclick="this.form.total.value=calculateTotal(this);"> Livraison
        <br>
          <input type="radio" name="service"   value="2.00" onclick="this.form.total.value=calculateTotal(this);"> Sur place
        <br>
          <input type="radio" name="service" value="10.00" onclick="this.form.total.value=calculateTotal(this);"> Traiteur
        <br>
        <br>
        <input type="hidden" name="calculatedTotal" value="0">
        <input type="hidden" name="previouslySelectedRadioButton" value="0">
        <strong>Your total is:</strong>
        <input type="text" name="total" readonly onfocus="this.blur();">
      </form>
    </td></tr></table></div>
    </body>
    </html>

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    un groupe de radio porte le même name ...
    Il faut teste en plus du type le name
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 3
    Par défaut
    Merci pour votre réponse,
    J'ai fait plusieurs tentatives en testant sur le name mais je ne comprend pas comment appliquer les conditions "retrancher si même groupe de boutons" et "ne pas retrancher si groupes de boutons différents"
    Merci.

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    Pour moi une solution il te faut stocker les valeurs et les names dans un array a deux dimensions il sera ensuite plus simple de traiter les données ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 3
    Par défaut
    Merci pour votre réponse, j'essaie cette solution.

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/04/2013, 10h58
  2. Tableau dynamique et fonction de calculs
    Par piotrowski-s dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 07/11/2012, 12h05
  3. [Javascript] Appeler une fonction d'une fenêtre parente
    Par TekP@f dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 26/08/2005, 11h33
  4. fonction qui calcule la factorielle ?
    Par piff62 dans le forum C
    Réponses: 8
    Dernier message: 27/02/2005, 11h00
  5. Javascript qui ne fonctione pas partout
    Par nad dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 22/11/2004, 17h51

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