On peut aussi réaliser une interface dynamique permettant à l'utiliser de gérer une liste de course qui sera stockée dans ses cookies. Pour cela on peut créer un tableau vide en HTML :
On peut ensuite ajouter des balises input pour rentrer le nom d'un produit, son prix et sa quantité, ainsi qu'un bouton "ajouter" pour l'ajouter à la liste, ce qui l'ajoutera à nos cookies et ajoutera sa ligne dans le tableau, pour que l'utilisateur puisse visualiser sa liste de courses. Il y a énormément de moyens de faire cela en JavaScript, dans l'exemple suivant, nous allons le faire de la manière la plus intelligente, c'est à dire en créant une fonction d'actualisation du tableau en fonction de la valeur du cookie, au lieu de modifier le tableau directement à la pression du bouton d'ajout. Ainsi, il n'y aura jamais d'erreur de représentation du cookie dans le tableau HTML. Notre HTML devient alors :
Voici un exemple de code JavaScript pour réaliser cette liste de course dynamique. (On utilisera des fonctions d'ajout et de suppression de cookies qui ont été codées auparavant)
//On créé la fonction de synchronisation du tableau HTML //avec le cookiefunctionsyncTable(){//on récupère le tableau HTMLvar htmlTab =document.getElementsByTagName("table")[0];//on récupère le cookie qui est une string en JSON sous forme de tableau JS.var liste =JSON.parse(getCookie("liste"));//on vide le tableau HTMLhtmlTab.querySelector("tbody").innerHTML ="";//on parcourt la liste en cookie pour ajouter les lignes au tableau HTMLfor(var i =0; i <liste.length; i++){//on créé l'élément de notre future balise trvar ligne =document.createElement("tr");//on récupère la liste dans le cookieif(getCookie("liste") ==""||getCookie("liste") ==undefined||getCookie("liste") ==null){//si le cookie n'existe pas encore, alors on prend un tableau vide. var liste = []; }else{var liste =JSON.parse(getCookie("liste")); }//on ajoute nos tdvar produit =document.createElement("td");produit.innerHTML = liste[i]["produit"];var prix =document.createElement("td");prix.innerHTML = liste[i]["prix"];var quantite =document.createElement("td");quantite.innerHTML = liste[i]["quantite"];ligne.appendChild(produit);ligne.appendChild(prix);ligne.appendChild(quantite);//on ajoute ensuite notre ligne tr dans le DOMhtmlTab.querySelector("tbody").appendChild(ligne); }}//On écoute les clics sur le bouton d'ajout et on ajoute au cookie l'élémentdocument.getElementById("ajouter").addEventListener("click",function(){//on récupères les informations du produit indiqués dans les inputvar produit =document.getElementsByName("produit")[0].value;var prix =document.getElementsByName("prix")[0].value;var quantite =document.getElementsByName("quantite")[0].value;//on créé le tableau associatif que l'on va ajouter à la suite du tableau//du cookie.var elem =newObject(); elem["produit"] = produit; elem["prix"] = prix; elem["quantite"] = quantite;//on récupère le tableau du cookieif(getCookie("liste") ==""||getCookie("liste") ==undefined||getCookie("liste") ==null){//si le cookie n'existe pas encore, alors on prend un tableau vide.var liste = []; }else{var liste =JSON.parse(getCookie("liste")); }//on ajoute le produit dans le tableauliste.push(elem);//on update le cookie qui restera 365 jours, parce que pourquoi pas ?setCookie("liste",JSON.stringify(liste),365);//On actualise notre tableau HTML pour l'utilisateursyncTable();});//on écoute le clic pour vider la listedocument.getElementById("vider").addEventListener("click",function(){//on vide la listesetCookie("liste","[]",365);//On actualise notre tableau HTML pour l'utilisateursyncTable();});//on affiche le tableau pour le premier chargement de la page.syncTable();
Contraitement à l'exercice précédent, celui-ci peut être copié collé tel quel dans un fichier HTML, il fonctionnera parfaitement.