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 :

Stockage variable pour réutilisation dans fonction


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 41
    Par défaut Stockage variable pour réutilisation dans fonction
    Bonsoir,

    Je me heurte depuis ce matin à un petit souci. Je suis sur un petit projet où je récupère des prix via une requete ajax, pour les faire apparaitre sur ma page. Je fais tout dynamiquement (sauf pour ajax, où je passe par php pour récupérer mes valeurs en bdd).

    Mon problème donc, c'est que pour calculer un total, je récupère mon tarif dans ma BDD, calcule ma tva et mon prix total. Si je le fais une fois, je n'ai pas de soucis, donc pour un tarif c'est ok. Par contre, si je ré-itère l'appel à la fonction, les prix sont encore bien récupérés, mais je n'arrive pas à récupérer mon ancien tarif pour faire mon total. J'ai essayé de tout stocker dans une fonction externe, dans un input, mais quand j'arrive à la fin de la fonction, je ne les garde pas visiblement.

    J'ai aussi vu qu'on ne pouvait pas vraiment return de valeurs par une fonction ajax, donc je ne peux pas vraiment la sortir.

    Auriez-vous une idée de solution ?

    Ci-dessous mon code js, c'est donc mon tarifHT que j'aimerais sortir à chaque appel de la fonction, pour pouvoir le cumuler au prochain appel, et l'intégrer donc au calcul du TTC :

    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
        function validationBasket(data, index){
     
            $("#validationPanier").remove();
            $("#totalPrice").remove();
     
            // var ht = 0;
            // var totalHT = calculHT(ht, data);
            if(index == 1){
                var totalHT = data;
            }
            else{
                var oldData = $("#htPrice");
                console.log(oldData);
                console.log(oldData.val());
                // var totalHT = data * 1 + oldData * 1;
            }
     
            var totalTVA = totalHT * 0.2;
            totalTVA = totalTVA.toFixed(2);
            var totalTTC = totalHT * 1 + totalTVA * 1;
     
     
            //Récap Prix
            var $recapPrice = $("<div id = 'totalPrice'><p>Total HT : "+totalHT+"€<br />TVA : "+totalTVA+"€<br />Total TTC : "+totalTTC+"€</p></div>");
            // Création du lien
            var $validPanier = $('<div id="validationPanier"><br />Payer</div>');
            // On récupère la value du HT pour pouvoir le gérer après dans la boucle quand l'index sera supérieur à 1
            var $htValue = $("<input type = 'number' id = 'htPrice' value = "+totalHT+" />");
     
            $("#titreResa").append($recapPrice);
            // Ajout du lien
            $("#titreResa").append($validPanier);
     
        }
     
            function getPrice(index,name,firstname,datereservation,type,tarif)
            {
              //debugger;
              var url = Routing.generate('price', {tarif: tarif});
              $.ajax({
                url: url,
                data: tarif,
                type: 'POST',
                success: function(data){
                    $("#resaBillet").append("<p class = 'recapBillet"+index+"'>Billet n°"+index+" - <strong>"+name+" "+firstname+"</strong><br />"+datereservation+" - Tarif "+type+" - <strong>"+data+" € HT</strong><br />");
                    deleteBillet(index);
                    validationBasket(data, index);
                },
                error: function(data){
                    alert('No data');
                }
              });
            }
     
            function addRecapBillet($prototype){
              // On récupère les valeurs des champs qui nous intéressent pour la partie visible du récap
              var name = $('#appbundle_basket_billet_'+(index-1)+'_name').val();
              var firstname = $('#appbundle_basket_billet_'+(index-1)+'_firstname').val();
              var type = $('#appbundle_basket_type option:selected').text();
              var datereservation = $('#appbundle_basket_date').val();
     
              // On vérifie si la checkbox tarif réduit est bien cochée ou non
              var tarifreduit = $('#appbundle_basket_billet_'+(index-1)+'_discount');
                if(tarifreduit.is(':checked'))
                {
                  tarifreduit = 'checked';
                }
     
     
              var country = $('#appbundle_basket_billet_'+(index-1)+'_country option:selected').text();
              // On calcule l'âge en fonction de la date choisie dans le billet
              var day = $('#appbundle_basket_billet_'+(index-1)+'_birthdate_day option:selected').val();
              var month = $('#appbundle_basket_billet_'+(index-1)+'_birthdate_month option:selected').val();
              var year = $('#appbundle_basket_billet_'+(index-1)+'_birthdate_year option:selected').val();
              month = month - 1;
              var date = new Date(year,month,day);
     
              // On convertit la date dans un format string pour l'utiliser lors de la modification du billet
              var textdate = formatDate(date);
              var today = new Date();
              var age = Math.floor((today-date) / (365.25 * 24 * 60 * 60 * 1000));
     
     
              // Détermination du tarif en fonction de l'age
                var tarif = "";
              if(age < 4)
                {
                  tarif = "bebe";
                }
              else if (age >= 4 && age < 12)
                {
                  tarif = "enfant";
                }
              else if (age >= 60)
                {
                  tarif = "senior";
                }
              else if (age && tarifreduit.is(':checked'))
                {
                  tarif = "reduit";
                }
              else
                {
                  tarif = "normal";
                }
     
              // On se sert de l'élément récupéré pour faire notre calcul de tarif
              $("<input type = 'number' id = 'htPrice' value =  />");
              // Placement des différents éléments dans le bloc récap
              $("#titreResa").append("<div id ='resaBillet'></div>");
              getPrice(index,name,firstname,datereservation,type,tarif);
              changeBillet(index, name, firstname, textdate, country, tarifreduit);
              // $("#resaBillet").append(changeBillet($(".recapBillet")));
            }
    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 098
    Par défaut
    Bonjour,
    tu crées correctement ton input
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var $htValue = $("<input type='number' id='htPrice' value=" + totalHT + " />");
    mais tu ne l’attaches pas dans le DOM. Ça reste une variable locale à la fonction validationBasket, elle est donc détruite comme toutes les autres variables locales lorsque la fonction se termine.

    Pour l’attacher dans le DOM, tu peux utiliser par exemple $("body").append(). Je te recommande de passer le type d’input en hidden pour qu’il n’apparaisse pas dans la page.

    Ou sinon, plus simplement, tu peux déclarer une variable globale en début de script :
    Et ensuite l’utiliser de la même manière que tout autre variable.

    Comme souvent, je vais te conseiller de passer en mode strict pour identifier plus facilement si tu as des variables qui sont accidentellement globales dans ton code. Pour rappel :
    • une variable non déclarée est globale en mode sloppy (non strict), ou produit une erreur en mode strict ;
    • une variable déclarée avec var est locale à la fonction, exactement comme un paramètre de fonction ;
    • une variable déclarée avec let est locale au bloc {}, par exemple un bloc de boucle for ou de conditionnelle if.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 41
    Par défaut
    Bonjour,

    Merci pour ta réponse ! J'ai rattaché mon input au body, en incrémentant à chaque tour de boucle ma valeur, ce qui m'a permis de tous les récupérer dans un tableau ! Je passe le sujet en résolu

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

Discussions similaires

  1. [AC-2000] Mémoriser une variable pour utilisation dans plusieurs procédures
    Par P'tit aviateur dans le forum VBA Access
    Réponses: 6
    Dernier message: 03/07/2009, 10h49
  2. utilsation Variable pour insérer dans une table
    Par jamalsettat dans le forum Langage SQL
    Réponses: 4
    Dernier message: 19/06/2009, 13h54
  3. Variable pour répartition dans un tableau (module streaming TV)
    Par Freeetv dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 21/07/2007, 14h19
  4. Réponses: 8
    Dernier message: 27/01/2007, 13h44
  5. Réponses: 5
    Dernier message: 13/08/2004, 15h40

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