Comment synchroniser des variables automatiquement

Résolu

bonjour a tous

est-il possible de rafraichir des variables l'intérieur d'un form ?

Dans mon bon de commande le total de la commande est mise dans cette variable MonPanier.totalpanier()

ensuite j'utilise cette même variable dans le code ci dessous 

var formu = document.getElementById("formsu");
formu.onclick = function(e){
  e.preventDefault();
var names = document.getElementById("names").value;
  console.log(names);
if (names == 'promotion') {
	document.getElementById("prints").innerHTML = MonPanier.totalpanier();
}
          <label>
<input type="radio" name="promotioncases" id="vert" data-target="30" value="30" />
</label>
<div id="30" class="descendre">
   <span>tu n'as pas de code promo</span>
   <form name="formu" id="formsu">
      Entre ton code promo:   <input type="text" id="names" />
      <input type="button" value=" Valide ton code promo" />
   </form>
   <p id="test"></p>
   <br />
</div>
                         
                       
                   
              
                     
             

Mais je me retrouve confronté a un soucis 

la variable contenue dans le code form ne se mets pas a jour de façon automatique avec l'autre qui sers donc a récupérer la commande 

le seul moyen que j'ai trouvé et que l'utilisateur entre un code et le valide et a ce moment la variable se met a jour 

Donc ma question est de savoir comment je pourrais m'y prendre pour que la variable contenue dans le form MonPanier.totalpanier() soit synchro avec celle qui reçoit la commande 

je pourrais faire un message d'erreur en disant qu 'il doit revalider si les deux variables ne sont pas égale

Mais cela demande encore une manipulation en plus pour l'utilisateur  


  

1 réponse

  1. Modérateur

    Bonjour,

    Il existe de nombreux "évènements" disponibles en html/javascript .. il n'y a pas que le onclick.

    Tu pourrais, par exemple, utiliser le même genre de code sur le "changement" dans un input ou tout autre champ html qui te sert à modifier les quantités ou lors de l'ajout de produit (et/ou la suppression), ou le click sur un bouton radio .. etc..

    Il te suffit de regarder ce qui existe ...

    Là, tu trouveras toutes les infos necessaires : https://www.google.com/search?q=html+javascript+event


    1. bonjour jordane 

      Merci pour la réponse

      Merci aussi pour le lien 

      Mais serait-il possible  que lorsque la variable MonPanier.totalpanier() change ,que toutes les  variables dans le form soient mise a jour

      j'ai essaye de trouver des exemples mais sans succès 

    2. Modérateur
      @flexi2202

      Alors.. déjà ...  MonPanier.totalpanier()  n'est pas une variable.

      MonPanier est une variable ( de type "objet" )  et totalpanier()  est une méthode de cet objet ( une fonction qui traites des données et retourne la somme ( le montant total) de ton panier

      A la limite, tu peux très bien, dans cette fonction ajouter des instructions pour en faire ce que tu veux .. y compris mettre à jour les données de ton formulaire.

      Mais à mon avis.. c'est plus dans la méthode d'ajout au panier qu'il faut placer ce traitement.. afin que, dès qu'un produit est ajouté ou retiré .. il affiche en temps réel les informations de ton panier.

    3. @jordane45

      oulalala décidément je m'embrouille dans tout , merci jordane comme toujours pour cette aide

      je viens de voir un peu le code que je partage qui crée les variable et les méthodes

      var MonPanier = (function() {
      	panier = [];
      	
      	
      	function Item(nom, prix, quantite,url) {
      		this.nom = nom;
      		this.prix = prix;
      		this.quantite = quantite;
      		this.url = url;
      			 console.log(url);
      		}
      
      
      	function savepanier() {
      		sessionStorage.setItem('MonPanier', JSON.stringify(panier));
      	//	console.log(setItem);
      	//	console.log(JSON.stringify(panier));
      	//console.log(('MonPanier', JSON.stringify(panier)));
      		//console.log(sessionStorage.setItem('MonPanier', JSON.stringify(panier)));
      		
      	}
      
      	function loadpanier() {
      		panier = JSON.parse(sessionStorage.getItem('MonPanier'));
      	}
      	
      	if (sessionStorage.getItem("MonPanier") != null) {
      		loadpanier();
      	}
      
      	var obj = {};
      
      	obj.ajouter_produit_dans_panier = function(nom, prix, quantite,url) {
      		for(var item in panier) {
      			if(panier[item].nom === nom) {
      				if(quantite)
      				{
      					panier[item].quantite = Number(quantite);
      				}
      				else 
      				{
      					panier[item].quantite ++;
      				}
      				savepanier();
      				return;
      				
      			}
      		}
      		var item = new Item(nom, prix, quantite,url);
      		//console.log(quantite);
      		panier.push(item);
      		savepanier();
      	}
      
      	obj.setquantiteForItem = function(nom, quantite) {
      		for(var i in panier) {
      			if (panier[i].nom === nom) {
      				panier[i].quantite = quantite;
      				break;
      			}
      		}
      	};
      
      	obj.enlever_produit_de_panier = function(nom) {
      		for(var item in panier) {
      			if(panier[item].nom === nom) {
      				panier[item].quantite --;
      				if(panier[item].quantite === 0) {
      					panier.splice(item, 1);
      				}
      			break;
      			}
      		}
      		savepanier();
      	}
      
      	obj.enlever_produit_de_panier_tous = function(nom) {
      		for(var item in panier) {
      			if(panier[item].nom === nom) {
      				panier.splice(item, 1);
      				break;
      			}
      		}
      		savepanier();
      	}
      
      	obj.clearpanier = function() {
      	    panier = [];
      		savepanier();
      	}
      
      	obj.totalquantite = function() {
      		var totalquantite = 0;
      		for(var item in panier) {
      			totalquantite += Number(panier[item].quantite);
      	}
      		return Number(totalquantite);
      	}
      
      	obj.totalpanier = function() {
      		var totalpanier = 0;
      		for(var item in panier) {
      			totalpanier += panier[item].prix * panier[item].quantite;
      		}
      	return Number(totalpanier.toFixed(decimal));
      	}
      
      	obj.listpanier = function() {
      		var panierCopy = [];
      		for(i in panier) {
      			item = panier[i];
      			itemCopy = {};
      			for(p in item) {
      				itemCopy[p] = item[p];
      			}
      			itemCopy.total = Number(item.prix * item.quantite).toFixed(decimal);
      			panierCopy.push(itemCopy)
      		}
      	return panierCopy;
      	}
      
      	return obj;
      })();

      je pense avoir trouve les endroits que je pourrais modifier

      	obj.enlever_produit_de_panier = function(nom) {
      		for(var item in panier) {
      			if(panier[item].nom === nom) {
      				panier[item].quantite --;
      				if(panier[item].quantite === 0) {
      					panier.splice(item, 1);
      				}
      			break;
      			}
      		}
      		savepanier();
      	}
      
      
      	obj.ajouter_produit_dans_panier = function(nom, prix, quantite,url) {
      		for(var item in panier) {
      			if(panier[item].nom === nom) {
      				if(quantite)
      				{
      					panier[item].quantite = Number(quantite);
      				}
      				else 
      				{
      					panier[item].quantite ++;
      				}
      				savepanier();
      				return;
      				
      			}
      		}
      		var item = new Item(nom, prix, quantite,url);
      		//console.log(quantite);
      		panier.push(item);
      		savepanier();
      	}
    4. Modérateur
      @flexi2202

      Il semble qu'il suffise de modifier le code de la fonction 

      savepanier();

      puisque cette dernière est appelée dans chacune des fonctions d'ajout/suppression de produit

    5. @jordane45

      merci jordane 

      donc cette fonction 

      	function savepanier() {
      		sessionStorage.setItem('MonPanier', JSON.stringify(panier));
      	//	console.log(setItem);
      	//	console.log(JSON.stringify(panier));
      	//console.log(('MonPanier', JSON.stringify(panier)));
      		//console.log(sessionStorage.setItem('MonPanier', JSON.stringify(panier)));
      		
      	}

      Mais comment je pourrais lui dire que 

      MonPanier.totalpanier() dans le form 
      doit être égal a 
      MonPanier.totalpanier() hors du form 

      a chaque changement dans la function savepanier