A partir d'une liste avec champ, faire un total

[Résolu]
Signaler
Messages postés
106
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
27 septembre 2019
-
Messages postés
106
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
27 septembre 2019
-
Bonjour,

J'ai une page ASP qui me liste un certain nombre de document par le biais d'une boucle.
Afin d'identifier chaque champ j'ai mis ceci:
<% Response.Write "" %>
i étant le chiffre de la boucle.
Jusque là j'ai aucun soucis

Mon Pb survient en fait avec la récupération via java de chaque valeur saisie qui est un chiffre.
Je souhaite faire le total à chaque fois qu'une valeur est modifiée et je l'affecte à un champ
J'ai d'ailleurs été obligé de déclarer un form pour la synthese car le getElementsByTagName ne marche pas !!
J'ai donc fait ceci:
function TotalNb()
{
nbDocBad=0;
for (i=1; i<=document.frmChoixDoc.txtNbChoix.value; i++)
nbDocBad=nbDocBad+document.frmChoixDoc.txtBad+[i].value;
alert(document.frmChoixDoc.txtBad+i.value);
document.frmSynthese.txtNbDocBad.value=nbDocBad;
}
Pour seule résultat, j'ai NaN quand je mets 1 par exemple dans mon premier champs ou dans un des suivants.
Si je fais un alert(document.frmChoixDoc.txtBad1.value) j'ai bien ma valeur, mais en passant par la boucle java, je ne l'ai plus.
J'ai certainement commis une erreur mais ou ?

Amicalement,
Thierry

20 réponses

Messages postés
544
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
20 mai 2005
1
J'ai écrit une bétise tout à l'heure mais là, j'ai vérifié :

arrondi = Math.round(1509.9499999999998*100)/100
Messages postés
544
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
20 mai 2005
1
document.frmChoixDoc.txtBad+i.value est une variable de type string
Messages postés
106
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
27 septembre 2019

Ok mais dans ce cas, comment puis je faire cela?
J'ai vraiment besoin de le faire pour mon travail, comment contourner cela, en convertissant mon string vers une décimal, en asp c'est possible, et en java?

Amicalement
Thierry
Messages postés
544
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
20 mai 2005
1
essaie ça :



number(document.frmChoixDoc.txtBad+i.value
)
Messages postés
106
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
27 septembre 2019

Cela me génère une erreur, Objet attendu avec le code 0 !!

J'ai regarder aussi du côté de :
long l = Long.parseLong(maString);
Mais ça marche pas non plus
Merci pour ton aide
Messages postés
544
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
20 mai 2005
1
Messages postés
106
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
27 septembre 2019

Quand je fais alert(Number(document.frmChoixDoc.txtBad+i.value) dans ma boucle, j'ai NaN.
Pourquoi ai je ceci?

Je continue d'explorer de mon côté,
Merci encore
Messages postés
544
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
20 mai 2005
1
J'ai pourtant déja utilisé cette méthode pour transformer un string en
nombre, mais eval() serait peut-êrtre plus correct. Voir le lien de mon
message précédent
Messages postés
106
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
27 septembre 2019

J'ai trouvé ceci:

String montexte = new String(&#171; 10 &#187;);
Integer nomnombre=new Integer(montexte);
int i = monnombre.intValue(); //convertion d'Integer en int


Mais lorsque je mets ceci, j'ai une erreur m'indiquant qu'il manque une ;

Je tourne en ronds et je m'arrache les cheveux :o/

Merci
Messages postés
106
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
27 septembre 2019

Après quelques tests, il s'avère que c'est dans ma récupération de la valeur du champs.
Autrement dit si je fais un alert(document.frmChoixDoc.txtBad+i.value) il me dit undefinde, par conséquent je ne peux pas faire de total sur des valeurs inexistantes.

Je ne pense pas me tromper pour récupérer les valeurs de x champs dans un tableau:
function TotalNb()
{
nbDocBad = 0;
for (i=1; i<=document.frmChoixDoc.txtNbChoix.value; i++)
{
nbDocBad+=eval(document.frmChoixDoc.txtBad+i.value); //incrément pour récup chq champs
}
document.frmSynthese.txtNbDocBad.value=nbDocBad;
}

Autrement, dit dans ma page de test, j'ai 9 champs, valeur stockée dans (document.frmChoixDoc.txtNbChoix.value).
La valeur i s'incrémente ok.
Mais il ne semble pas lire mon champs correctement.
Cela provient de ma formulation d'interrogation du champ:
document.frmChoixDoc.txtBad+i.value
Le +i génère un pb, mais comment faire autrement?

Amicalement
Thierry
Messages postés
544
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
20 mai 2005
1
eval(document.
getElementsByTagName('txtBad'+i).value)
Messages postés
732
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
29 octobre 2007

Bonjour

perso, je ferais :
la boucle asp :
<% Response.Write "" %>

le javascript : (Attention : java != javascript)

function TotalNb()
{
var nbDocBad=0;
for (i=0; i<document.getElementsByName("txtBad").length; i++)
nbDocBad+=eval(document.getElementsByName("txtBad")[i].value);
document.getElementsByName("txtNbDocBad")[0].value=nbDocBad;
}

1/ Tu n'es absolument pas obligé de déclarer un formulaire pour ce type de manip (un formulaire sert à envoyer des données au serveur). getElementsByName est un tableau (Remarquer le s de "elements", voir la fonction TotalNb())

2/ En règle générale, il est préférable d'accéder aux éléments de la page par document.getElementById() ou document.getElementsByName plutôt que via un formulaire, inutile.

chimelPremier :
document.getElementsByTagName('txtBad'+i).value ne peut pas marcher, pour les raisons que je viens de donner.

Cordialement
Roro webDev
Messages postés
106
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
27 septembre 2019

en faisant

for (i=1; i<=document.frmChoixDoc.txtNbChoix.value; i++)
{
alert('i = '+i+' - txtBad'+i+'.value : '+document.getElementsByTagName('txtBad'+i).value);
}
Il me donne undefined pour chaque champs trouvé.

Voici un extrait de mon code html au cas où:

<tr>
<td width="31" align="center">

</td>
</tr>
<tr>
<td width="31" align="center">

</td>
</tr>
.....
Je comprends pas où ça coince :o(

Merci de ta patience
Messages postés
106
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
27 septembre 2019

Merci Roro06, pour le total ça marche au poil
Mais, j'ai mis un form pour envoyer justement vers un serveur par la suite les sélections faites pour les enregistrer dans une table.
Le tableau ressemble à ça:
Ligne 1 txtBad1 = 1
Ligne 2 txtBad2 = 0
Ligne 3 txtBad3 = 0
Ligne 4 txtBad4 = 2

Mon Total txtBad sera = 3
Lorsque je valide, j'enregistre la valeur de chaque champs dans ma table en récupérant celle ci via une boucle asp dans ma page de traitement, mais si je mets txtBad seulement en nom de champs, ça marche plus.

Donc pour résumer, ta technique fonctionne impec pour le total, mais plus de résultat dans mon traitement.
Ma technique pour le traitement fonctionne, mais je n'ai pas de total en live sur la page de saisie.
Je vais plus avoir de cheveux si ça continue :o))

Merci de votre aide à tous les deux en attendant
Messages postés
732
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
29 octobre 2007

Bonjour
Premièrement, garde tes cheveux : l'été approche, ils peuvent encore servir
en suivant "ma" technique, tu va recevoir ton textBad sous forme de tableau.
Si tu fais : <%=request("textBad")%>, tu va voir apparaître qqch sous la forme :
7,8,1,-9,8...
donc tu peux exploiter de plusieurs manières :

dim t()
t=split(request("textBad"), ",")

soit dans une boucle :
for each t in request("textBad")
total=total+t
next

ps:Attention à getElementsByTagName : comme son nom l'indique, il permet d'accéder aux éléments du document par leur nom de balise, càd : td, table, body, a, etc ... (etc n'étant pas une balise, ça veut dire et caetera). C'est un tableau (d'où le s), donc pour accéder à un élément, il faut un indice. Par exemple, pour accéder à l'élément body, il faut utiliser : document.getElementsByTagName("body")[0]

Cordialement
Roro webDev
Messages postés
106
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
27 septembre 2019

Merci bcp Roro pour toutes ces précisions, effectivement, en utilisant split ensuite, c'est royal.


Je ne savais pas que cela pouvait être exploitable via un simple request.


Il me reste à faire des calculs pour compliquer le tout :o))


Si la valeur du champs est diff de 0, ben je la multiplie par celle du champs prix et j'additionne :o))


Allez, j'y retourne, et merci de t'inquièter de ma chevelure ;o)
Messages postés
106
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
27 septembre 2019

Tite question :o)
Si mon champs prix contient la valeur 21,95 par exemple, il me prend seulement 95 si j'utilise la fonction eval(document.getElementsByName("pxDoc")[i].value)
Pourquoi et comment remédier à cela.
Amicalement
Thierry
Messages postés
106
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
27 septembre 2019

Si j'en crois ce que j'ai lu, javascript n'interprète que le point comme décimal, je vais donc le transformer en amont ma virgule en point :o))
Messages postés
106
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
27 septembre 2019

J'ai réussi à faire tout ça, cool merci bcp à vous deux

Euh sans trop abuser, je clos le post ensuite
Lors de tous ces calcules, si je fais par exemple 19.95*101 ça donne 1509.9499999999998, existe t'il un moyen de définir le format à 2 chiffres après la virgule.

Merci beaucoup
Amicalement,
Thierry
Messages postés
106
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
27 septembre 2019

Merci Infiniment
Amicalement
Thierry