Aller au contenu

Problème de non réexécution de script Javascript


Vanator

Sujets conseillés

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 :)

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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>';

Lien vers le commentaire
Partager sur d’autres sites

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é par Vanator
Lien vers le commentaire
Partager sur d’autres sites

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));
}

Lien vers le commentaire
Partager sur d’autres sites

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 :(

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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 :wacko:

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...