Donnez vie à vos documents numériques !
 

rafraichissement de calcul JS

abracadabraPDF Forums PDF – Général rafraichissement de calcul JS

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #45823
    fasm
    Membre

    Bonjour,

    J’ai une petite formule pour faire un calcul.
    J’ai un champ à remplir “rang” = var a1
    Je récupère l’état de boutons coché (bouton radio) correspondant aux variable b1, c1 (=0 ou 1 donc avec un choix exclusif de l’un ou l’autre).

    Dans l’ordre, champ, bouton puis bouton radio le calcul se fait sans problème.
    Maintenant si je change la valeur initiale de “rang” (var a1) alors le résultat final de mon champ (calcul en dessous) passe à 0 !!!

    Il faut re-effectuer un choix  (var b1 ou c1) pour avoir une valeur consistante.
    J’ai essayé avec une action “this.calculateNow()” dans le champ rang sans résultat…
    Je ne vois pas de solution…

    C’est peut-pêtre un problème de logique d’architecture, je devrais mettre le script dans le bouton radio ou une checkbox plutôt que dans le champ résultat..

    (function () {

        var a1 = getField(“rang”).value;
        var b1 = getField(“kdi1a”).value;
        var c1 = getField(“kdi1b”).value;
        var tx = getField(“taux”).value;

        if (a1 > 1) {
          event.value = ((a1*b1*(3+(1/2)))+((250+((a1-2)*50))*c1))*tx;
        }
        else if (a1 >0 ) {
          event.value = ((b1*(3+(1/2)))+(250*c1))*tx;
        }

        else {
          event.value = 0;
        }

    })();

Affichage de 7 réponses de 1 à 7 (sur un total de 7)
  • Auteur
    Réponses
  • #63630
    Merlin
    Maître des clés

    Bonjour.

    Le résultat est logique : si on multiplie par zéro le résultat est forcément égal à zéro. Le même problème devrait se poser avec b1, c1 et tx.
    Donc il faut protéger le calcul contre les zéros.
    Par ailleurs, il n’y a pas besoin de créer une fonction puisque ce script est placé en script de calcul, et la logique voudrait que s’il n’y a pas de calcul le résultat soit “rien” et non pas zéro qui serait le faux résultat d’un calcul non effectué.


        var a1 = getField(“rang”).value;
        var b1 = getField(“kdi1a”).value;
        var c1 = getField(“kdi1b”).value;
        var tx = getField(“taux”).value;
       
    if (a1 != 0 && b1 != 0 && c1 != 0 && tx != 0) {
          event.
    target.value = ((a1*b1*(3+(1/2)))+((250+((a1-2)*50))*c1))*tx;
        }
        else {
          event.
    target.value = “”;
        }

    #63631
    fasm
    Membre

    Merci pour la réponse ! mais je ne saisi pas :(
    Je n’ai pas de problème avec les 0 la formule fonctionne et les 0 que je ‘créé’ avec les boutons radios me servent à neutraliser une des deux parties de l’équation pour effectuer un calcul de prix différent suivant le choix (via bouton radio) effectué.
    Après pour une valeur de “rang” “0” je veux avoir un résultat de “0”quelque soit le choix,  et pour “1” le deuxième choix doit donner une valeur particulière (tout ça propre à mes contraintes professionnelles) d’où les deux ‘else if’.
    Si j’ai bien compris votre correction en rouge neutralise le calcul si présence d’un zéro pour les variables, mais à part pour la 4ème variable qui ne sera jamais à zéro les trois doivent pouvoir exister avec un zéro. Et tout fonctionne sauf si l’utilisateur refait le calcul en partant depuis le début et entrant une nouvelle valeur. A ce moment là le résultat devient 0 jusqu’au moment de refaire un choix via les boutons radios…

    #63632
    Merlin
    Maître des clés

    Je n’étais déjà pas certain d’avoir tout compris, mais là…  :joker: :geek:

    Peux tu partager ce document ou une maquette ?

    #63633
    fasm
    Membre

    Voici le brouillon de travail. les boutons radio exportent une valeur (0 ou 1) qui permettent d’effectuer le calcul dans la case résultat (différent selon choix)
    Mais si on rentre un nouveau nbre de rang…
    Le bouton reset sert à annuler la ligne sans remettre à zéro le rang…

    #63634
    bebarth
    Maître des clés

    bonjour,
    Le propre du bouton radio est de pouvoir lui attribuer plusieurs valeurs selon le bouton coché, ce qui évite d’avoir plusieurs variables…
    Essaye d’adapter ce script de calcul (j’espère ne m’être pas trompé dans les formules) :

    Code:
    var a1 = this.getField(“rang”).value;
    var tx = this.getField(“taux”).value;
    var bt = this.getField(“bouton”).value;
    switch (bt) {
        case “boutonGauche”:
        if (a1 >> 1) {
            var res = a1*3.5;
        } else {
            var res = 3.5;
        }
        break;
        case “boutonDroit”:
        if (a1 >> 0) {
            var res = 250+(a1-2)*50;
        } else {
            var res = 250
        }
    }
    if (a1 == 0) var res = 0;
    this.event.target.value = res * tx;

    Pour ma part, je ne suis pas professeur de JavaScript, mais je ne suis pas favorable à supprimer le “this.” même si on ne travaille qu’avec un seul fichier ouvert et qu’il peut paraître inutile.
    @+
    :bonjour:

    #63635
    fasm
    Membre

    Je n’ai pas encore réussi à l’adapter mais l’exemple en pj est exactement cela ! Merci beaucoup je vous tiens au courant :)

    PS : petite erreure de syntaxe de ma part…

    #63636
    fasm
    Membre

    C’est absolument parfait, merci beaucoup !

Affichage de 7 réponses de 1 à 7 (sur un total de 7)
  • Vous devez être connecté pour répondre à ce sujet.