Adloun

JavaScript : rendre le Web interactif (école d'ingénieur) · Chapitre 8 · Exercice de TD

Quantités modifiables

Événements et formulaires · niveau 2

Énoncé

Un tableau de panier contient, pour chaque livre, un champ de quantité (min="0", max="20") ; le prix unitaire est dans l'attribut data-prix de la ligne. Recalculer le total à chaque modification d'une quantité, avec un seul écouteur. Une quantité vide ou hors bornes compte pour 0.


<tbody id="lignes">
  <tr data-prix="32"><td>Programmation Java</td><td>32 €</td><td><input type="number" min="0" max="20" value="1" aria-label="Quantité de Programmation Java"></td></tr>
  <tr data-prix="8.5"><td>Le Petit Prince</td><td>8,50 €</td><td><input type="number" min="0" max="20" value="2" aria-label="Quantité de Le Petit Prince"></td></tr>
</tbody>

Corrigé


const lignes = document.querySelector("#lignes");
const total = document.querySelector("#total");
const euros = new Intl.NumberFormat("fr-FR", { style: "currency", currency: "EUR" });

function recalculer() {
  let somme = 0;
  for (const ligne of lignes.rows) {
    const champ = ligne.querySelector("input");
    const quantite = champ.validity.valid ? champ.valueAsNumber || 0 : 0;
    somme += Number(ligne.dataset.prix) * quantite;
  }
  total.value = euros.format(somme);
  console.log(total.value);
}

// Un seul écouteur « input » sur le corps du tableau : l'événement remonte
// depuis n'importe quel champ de quantité.
lignes.addEventListener("input", recalculer);
recalculer();

Au chargement, puis avec 3 exemplaires de Java, avec une quantité vide pour le Petit Prince, et enfin avec 25 :


49,00 €
113,00 €
96,00 €
96,00 €

, puis . Un champ vide a pour valueAsNumber NaN, que || 0 remplace par 0. La quantité 25 dépasse le maximum : le champ n'est pas valide et compte pour 0, d'où 96 €.

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →