Bonjour,
Je propose une solution basée sur un objet littéral, l’équivalent JavaScript des tableaux de PHP : il permet de donner des clés à une liste d’objets divers… Par exemple :
1 2 3 4
| var Panier = {
toto: 2,
tutu: 3
} |
Cet objet sera global.
En fait je vais séparer totalement le traitement des données et le traitement de l’affichage. Par souci de simplicité, la fonction d’affichage reconstruit entièrement le panier à chaque action. C’est potentiellement assez lent, si ton panier est susceptible de contenir beaucoup d’élements, on réfléchira à une solution plus adaptée.
Pour les données, une fonction ajouter :
1 2 3 4 5 6 7 8
| function ajouter( produit ) {
if (produit in Panier) {
Panier[produit]++;
} else {
Panier[produit] = 1;
};
rafraichir();
}; |
La fonction rafraichir gère l’affichage. Admettons que ton panier est représenté par un tableau à deux colonnes :
1 2 3 4 5 6 7 8 9 10 11
| <table id="panier">
<thead>
<tr>
<th>Produit</th>
<th>Quantité</th>
</tr>
</thead>
<tbody id="contenu-panier">
...
</tbody>
</table> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| function rafraichir() {
// on commence par vider sauvagement le tableau
var tbody = document.getElementById('contenu-panier');
tbody.innerHTML = '';
for (var produit in Panier) {
// construction DOM propre
var nomProduit = document.createElement('td');
nomProduit.appendChild(document.createTextNode(produit));
var quantiteProduit = document.createElement('td');
quantiteProduit.appendChild(document.createTextNode(Panier[produit]));
var tr = document.createElement('tr');
tr.appendChild(nomProduit);
tr.appendChild(quantiteProduit);
// insertion finale
tbody.appendChild(tr);
};
}; |
Note l’utilité de l’opérateur in, qui permet à la fois de tester et d’itérer les propriétés d’un objet.
Il ne reste plus qu’à déclarer le panier au début du script :
Et adapter les images :
<img alt="tata" src="tata.png" width="85" height="85" onclick="ajouter(this.alt)" />
C’est pas plus méchant que ça quand on connaît l’astuce !
Partager