Sur ma page de paiement, j'ai besoin de deux entrées avec une valeur totale de paiement: - une que le client peut voir - une autre qui est cachée.

J'ai écrit un code qui transmet le prix de chaque élément à l'entrée lorsqu'un client coche une case avec un produit pour lequel il veut payer, mais cela ne fonctionne qu'avec une seule entrée.

J'essayais d'utiliser différentes options (comme getElementsByName et getElementsByClassName) mais j'apprends JS maintenant et je n'ai aucune idée de comment résoudre ce problème. :(

function select(selector, parent){
  return Array.from((parent||document).querySelectorAll(selector));  
}

var inputs = select('.sum'),
    **totalElement = document.getElementById('payment-total');**

function sumUpdate(){
  totalElement.value = inputs.reduce(function(result, input){
    return result + (input.checked ? parseFloat(input.value) : 0);
  }, 0).toFixed(0);
}

CE QUE J'AI ESSAYÉ:

var inputs = select('.sum'),
        **totalElement = document.getElementsByName('payment-total')[0][1];**

var inputs = select('.sum'),
            **totalElement = document.getElementsByName('payment-total, payment-total2')[0][1];**

var inputs = select('.sum'),
                **totalElement = document.getElementsByName('payment-total).getElementsByName('payment-totalTwo);**
0
Jason Wysocki 4 nov. 2019 à 14:01

1 réponse

Si je vous comprends bien, vous voulez mettre la valeur calculée à la fois dans l'élément id="payment-total" et dans l'élément id="payment-total2".

Si c'est le cas, faites ce que vous avez déjà fait pour payment-total, mais aussi pour payment-total2, voir *** commentaires:

var inputs = select('.sum'),
    totalElement = document.getElementById('payment-total'),
    totalElement2 = document.getElementById('payment-total2'); // ***

function sumUpdate(){
//vvvvvvvvvvvvvvvvvvvvvv---- ***
  totalElement2.value = totalElement.value = inputs.reduce(function(result, input){
    return result + (input.checked ? parseFloat(input.value) : 0);
  }, 0).toFixed(0);
}

Je ne vois pas immédiatement la raison d'avoir une entrée visible et cachée, mais si vous en avez besoin pour une raison quelconque, c'est comme ça que vous le feriez.

Si cela arrivait au point qu'il y avait trois éléments ou plus que vous vouliez mettre à jour, je leur donnerais probablement une classe et les sélectionnerais comme vous avez sélectionné vos éléments .sum, puis calculez le total une fois et affectez à tous dans une boucle. Mais pour seulement deux, répéter la recherche et l'affectation semble correct.

0
T.J. Crowder 4 nov. 2019 à 11:09