Vanator Posté 14 Avril 2006 Posté 14 Avril 2006 Bonjour, hier j'ai posté un message pour un script. Après que le problème soit résolu, j'ai à nouveau un autre problème (toujours sur le même script). Pour info voir ici : sujet du problème précédent Maintenant j'ai un autre soucis. J'ai fait un petit script tout simple qui recalcule le prix total pour chaque article selon son prix unitaire et la quantité souhaitée. Voici le code : function prix(i){ quantite = eval('document.formulaire.quantite_'+i); prix = eval('document.formulaire.prix_'+i); tot = eval('document.formulaire.total_'+i); tot.value = quantite.value * prix.value;} où la variable "i" est l'identifiant de l'objet. Ce que je ne comprends pas c'est que le script fonctionne correctement 1 fois, mais après lorsque je rempli une 2e champ et qu'il doit recalculer pour le 2e total en réexecutant le même script, il ne fonctionne pas Quelqu'un peut-il m'aider ? Merci d'avance
Vincent Posté 14 Avril 2006 Posté 14 Avril 2006 sur quel evenement tu demandes l'execution de la fonction?
Vanator Posté 14 Avril 2006 Auteur Posté 14 Avril 2006 dans ma page PHP j'ai ceci comme code : echo '<td class="prix"><input type="text" name="quantite_'.$i.'" class="champ" maxlength="2" value="0" onchange="prix('.$i.')"/></td>'; où $i est donné en fonction d'une boucle. J'ai le même soucis si je mets onblur.
Vanator Posté 14 Avril 2006 Auteur Posté 14 Avril 2006 Voici même le formulaire de la page PHP en entier (au cas où cela vienne d'autre chose) : echo '<form method="post" name="formulaire" action="cor_commande_pdf.php">'; echo '<table id="commande">'; echo '<tr>'; echo '<td><h4>Désignation du produit</h4></td>'; echo '<td><h4>Quantité</h4></td>'; echo '<td><h4>Prix unitaire</h4></td>'; echo '<td><h4>Total</h4></td>'; echo '</tr>'; $requete = mysql_query('SELECT * FROM cor ORDER BY cor_id DESC'); $nombre = mysql_num_rows($requete); $i = 1; while($data = mysql_fetch_object($requete)) { echo '<tr>'; echo '<td><span class="gras">n°'.afficher($data->cor_id).'</span> - '.afficher($data->cor_titre).'</td>'; echo '<td class="prix"><input type="text" name="quantite_'.$i.'" class="champ" maxlength="2" value="0" onchange="prix('.$i.')"/></td>'; echo '<td class="prix"><input type="text" name="prix_'.$i.'" class="prix" value="5.50" onfocus="this.blur();"/></td>'; echo '<td class="prix"><input type="text" name="total_'.$i.'" class="champ" value="0" onfocus="this.blur();"/></td>'; echo '</tr>'; $i = $i + 1; } echo '<tr>'; echo '<td><h4>Frais de port</h4></td>'; echo '<td></td>'; echo '<td class="prix"><input type="text" name="frais_port" class="prix" value="1.50" onfocus="this.blur();"/></td>'; echo '<td class="prix"><input type="text" name="total_port" class="champ" onfocus="this.blur();"/></td>'; echo '</tr>'; echo '<tr id="total">'; echo '<td><b>TOTAL NET A PAYER</b></td>'; echo '<td></td>'; echo '<td></td>'; echo '<td class="prix"><input type="text" name="total_final" class="champ" onfocus="this.blur();"/></td>'; echo '</tr>'; echo '</table>'; echo '<p class="centre"><input type="submit" value="Valider" /></p>'; echo '</form>';
Vanator Posté 14 Avril 2006 Auteur Posté 14 Avril 2006 (modifié) Y'a un truc qui est bizarre c'est que si je teste les lignes une par une en rajoutant au fûr et à mesure pour voir quand ça bloque, si je mets ceci : function prix(i){ alert('test'); quantite = eval('document.formulaire.quantite_'+i);} ça fonctionne. Mais dès que je mets celà : function prix(i){ alert('test'); quantite = eval('document.formulaire.quantite_'+i); prix = eval('document.formulaire.prix_'+i);} ça bloque, mais je ne vois pas pourquoi Modifié 14 Avril 2006 par Vanator
Vincent Posté 14 Avril 2006 Posté 14 Avril 2006 utilise la fonction parseFloat pour t'assurer que ta valeur récupérée soit bien numerique. function prix(i){alert('test');quantite = eval('parseFloat(document.formulaire.quantite_'+i));prix = eval('parseFloat(document.formulaire.prix_'+i));}
Vanator Posté 14 Avril 2006 Auteur Posté 14 Avril 2006 Ne faut-il pas mettre plutôt function prix(i){ alert('test'); quantite = eval('parseFloat(document.formulaire.quantite_'+i+')'); prix = eval('parseFloat(document.formulaire.prix_'+i+')');} Pour les parenthèses ? Enfin sans cette correction ça ne calcule plus rien et ça met une erreur avant, et avec ça ne marche pas plus
Vincent Posté 14 Avril 2006 Posté 14 Avril 2006 oui voila le travail quand on réponds a la volé il faut d'abord evaluer la chaine de caractere puis s'assurer que LA VALEUR est en numérique (et non l'objet comme j'ai marqué). 2e essai function prix(i){var quantite = eval('document.formulaire.quantite_'+i);var prix = eval('document.formulaire.prix_'+i);var tot = eval('document.formulaire.total_'+i);tot.value = parseFloat(quantite.value) * parseFloat(prix.value);} mais je ne vois pas vraiment pourquoi tu dis que tu as une erreur sur la construction de ta variable prix.
Vanator Posté 14 Avril 2006 Auteur Posté 14 Avril 2006 Bah je n'ai pas d'erreur, le soucis que j'ai c'est que je ne sais pas pourquoi la 1ère fois le script s'exécute parfaitement sans soucis, mais dès qu'on change la valeur d'un 2e champ là ça créé une erreur, quel que soit le champ rempli en 1er et en 2e. Je ne comprends vraiment pas C'est comme si quelque chose changé à la première exécution et non réinitialisé empêchait le script de s'exécuter une seconde fois... Hier j'ai apssé toute la journée sur ce #&@% formulaire en vérifiant 6549465 possibilités et au final je ne sais toujours pas ce qui se passe, j'en deviens
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant