Page 1 sur 1
Encore aide Javascript
Publié : 23 juin 2004, 10:58
par DJiK
Me revoilà avec mon niveau de n00b en Javascript...
Code : Tout sélectionner
function majvaleurs(nbreprod)
{
var total;
for (var i=1; i<nbreprod; i++)
{
total += document.getElementById(i).value;
}
document.getElementById('total').value = total;
}
Erreur : invalid assignment left-hand side
Moi pas comprendre... += existe pas? le .value ne renvoie pas un nombre?

Publié : 23 juin 2004, 11:11
par jv2759
juste pour savoir : total = total + document.getElementById(i).value;
cela marche.
Sinon moi ce qui me gene dans ce que tu dit, c'est le fait que "totale" ne soit pas tiper, car comment interpreter un total += quelquechose.
Essais :
var total='';
Ainsi tu auras initialiser la variable, cela marcheras peut-être mieux...
PS : Je ne confirme pas l'existance de +=, je n'en sait rien...
Publié : 23 juin 2004, 11:20
par Xanthor
document.getElementById('total') = total
total est un élément XML ? Comment tu fais pour ajouter des éléments ?
Sinon, effectivement, le
value ne renvoie pas un nombre mais une string
Publié : 23 juin 2004, 11:57
par DJiK
Xanthor a écrit :document.getElementById('total') = total
total est un élément XML ?
Oups, oublié un .value ici.
J'ai plus d'erreur Javascript en le rajoutant.
Mais en effet, il ajoute les chaines de textes à la suite.
Style 3+4 = 34!
+= existe bien, et en mettant var total =''; ça évite qu'il mette Undefined34 mais il reste quand m^ 34 et pas 3+4=7!
Publié : 23 juin 2004, 12:06
par Benoit
JavaScript fait la conversion automatiquement, mais comme c'est une assignation c'est le second membre qui est converti.
Je ne confirme pas l'existence de +=...
Moi oui
http://devedge.netscape.com/library/man ... ml#1042274
Publié : 23 juin 2004, 13:49
par Bobe
Code : Tout sélectionner
function majvaleurs(nbreprod)
{
var total = 0;
for (var i=1; i<nbreprod; i++)
{
total += parseInt(document.getElementById(i).value);
}
document.getElementById('total').value = total;
}
À moins que je n'ai pas bien compris...
Au passage, ceci:
me laisse à penser que tes attributs id dans le document ne contiennent qu'un chiffre. Un identifiant ne peut commencer par un chiffre.
Publié : 23 juin 2004, 14:28
par DJiK
C'est incroyable, m^ avec ParseInt il continue d'ajouter les chiffres à la queue-leuleu au lieu de les ajouter!
Bobe a écrit :tes attributs id dans le document ne contiennent qu'un chiffre. Un identifiant ne peut commencer par un chiffre.
J'ai essayé, mais je suis pas arrivé à faire des lettres + le chiffre en Javascript!
Maintenant que je sais comment ajouter du texte, je devrais corriger ça!
Merci pour votre aide en tout cas, j'espère qu'on finira par y arriver!
Voilà où j'en suis:
Code : Tout sélectionner
function majvaleurs(nbreprod)
{
var total='';
for (var i=1; i<nbreprod; i++)
{
var indice = 'soustotal' + i;
if (document.getElementById(indice).value != '')
total += parseFloat(document.getElementById(indice).value);
}
alert(total); /* pour vérifier. */
}
Oui ce sont des float mais ça fait pareil! Résultat: 1.1 + 2.2 = 1.12.2

Publié : 23 juin 2004, 14:36
par Benoit
Pour éviter le parseFloat, il suffit tout simplement d'initialiser total à zéro (valeur numérique) et non à une chaîne vide (sinon il devient une chaîne forcément et ce que tu lui ajoute s'ajoute sous forme de chaîne également).
Publié : 23 juin 2004, 14:54
par chBok
Un truc à tester qui peut fonctionner (enfin sur certains compilateurs), c'est de faire :
On force d'entrée à signaler que l'on veut travailler avec une variable float. Essaie toujours.
Publié : 23 juin 2004, 15:03
par DJiK
Benoit a écrit :Pour éviter le parseFloat, il suffit tout simplement d'initialiser total à zéro
C'est ce que j'avais fait tout à l'h sans le parseFloat ça marchait pas.
Mais il faut bien les 2!
total=0 et += parseFloat(...) ÇA MARCHE!
Ouf, merci à tous.
Reste plus qu'à trouver comment n'afficher que 2 décimales!

Publié : 23 juin 2004, 15:58
par Benoit
chBok a écrit :Un truc à tester qui peut fonctionner (enfin sur certains compilateurs), c'est de faire :
On force d'entrée à signaler que l'on veut travailler avec une variable float. Essaie toujours.
Pas d'accord, ta ligne est strictement équivalente (par définition) à
C'est bien le type initial de
total et seulement lui qui sera pris en compte pour déterminer le résultat de l'opérateur "+" (qui comme vous le savez sans doute fonctionne de gauche à droite), ici la concaténation.
Pour preuve, il suffit d'entrer dans la console JavaScript :
Par contre, voici pourquoi le parseFloat est finalement nécessaire :
On a ici l'addition qui se fait correctement entre les deux nombres (types compatibles), et ensuite au moment d'ajouter un string, l'interpréteur voit que le type n'est pas compatible et réalise alors une simple concaténation (et je m'étais trompé je pensais qu'il ferait la conversion dans l'autre sens).
Publié : 23 juin 2004, 16:06
par chBok
Benoit a écrit :chBok a écrit :Un truc à tester qui peut fonctionner (enfin sur certains compilateurs), c'est de faire :
On force d'entrée à signaler que l'on veut travailler avec une variable float. Essaie toujours.
Pas d'accord, ta ligne est strictement équivalente (par définition) à
C'est bien le type initial de
total et seulement lui qui sera pris en compte pour déterminer le résultat de l'opérateur "+" (qui comme vous le savez sans doute fonctionne de gauche à droite), ici la concaténation.
Ah oui, c'est juste, le type initial de total fait voler en éclat ma proposition, mais en général, ca fonctionne avec cette astuce
