Bonjour,

Je commence mon apprentissage du Js et je suis bloqué dans un calcul d'un <select> avec des <option>.
Ce que j'aimerai faire c'est quand je sélectionne la "taille" et la "quantité", la multiplication s'affiche avec innerHtml dans le span "total".
Pour le moment j'ai bien la taille ou la quantité qui s'affiche dans le span mais pas la multiplication que j'aimerai.

Code Html:
<div class="form-inputs">
<select id="taille" onchange="getPers(this)">
<option value="">Taille</option>
<option value="2.95" id="ind">individuelle</option>
<option value="12">4 personnes</option>
<option value="18">6 personnes</option>
</select>
<select id="quantité" onchange="getQuantity(this)">
<option value="">Quantité</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<input type="date" id="commande_date" />
</div>
<div class="panier">
<input type="submit" value="AJOUTER AU PANIER" />
<p>Total : <span id="total"></span> €</p>
</div>

Code JS

function getPers(option) {
total.textContent = option.value

}
function getQuantity(option) {
total.textContent = option.value

}

3 réponses


Aecy
Réponse acceptée

Bonjour alex141282 !

Voici une possibilité qui peut être suivi, j'ai personnellement utilisé un event listener qui écoute le changement de l'input en question, a chaque changement les valeurs de base sont changé pour les nouvelles et ainsi calculer le prix à chaque changement également. Rien de bien compliqué, et y a surement beaucoup plus simple comme solution également, mais n'ayant que 10min devant moi, c'était le plus rapide à écrire ^^

Voici le code html

<div>
        <select id="size">
            <option value="">Taille</option>
            <option value="2.95">individuelle</option>
            <option value="12">4 personnes</option>
            <option value="18">6 personnes</option>
        </select>
        <select id="quantity">
            <option value="">Quantité</option>
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
        </select>
        <input type="date" />
        <div class="panier">
            <input type="submit" value="AJOUTER AU PANIER" />
            <p>Total : <span id="total"></span> €</p>
        </div>
</div>

Voici le code JS

<script>
        let size = 0;
        let quantity = 0;

        const update_price = () => {
            let price = size * quantity;

            if (isNaN(price)) throw new Error("Le prix n'est pas correct.");
            if (price <= 0) throw new Error("Le prix est inférieur à zéro...");

            document.getElementById('total').innerText = size * quantity;
        };

        document.getElementById('size').addEventListener('change', (e) => {
            let new_size = parseInt(e.currentTarget.value);
            size = new_size;

            update_price();
        });

        document.getElementById('quantity').addEventListener('change', (e) => {
            let new_quantity = parseInt(e.currentTarget.value);
            quantity = new_quantity;

            update_price();
        });
</script>

Merci pour ta réponse Aecy !

Ton code marche parfaitement bien.
J'ai juste modifié ParseInt en ParseFloat pour les prix avec virgule.
;-)

Avec plaisir ! Oui, je n'ai pas fait attention que c'était des floats.

petit conseil: essaie de conserver des prix en centimes afin de pas avoir de soucis de float justement par la suite, car si tu dois commencer à faire des calculs tu verras qu'avec plusieurs tests certains prix ne seront pas correct.