Encore aide Javascript

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
Répondre
DJiK
Lézard à collerette
Messages : 474
Inscription : 17 févr. 2004, 13:18

Encore aide Javascript

Message par DJiK »

Me revoilà avec mon niveau de n00b en Javascript... :oops:

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? :?:
Dernière modification par DJiK le 23 juin 2004, 12:01, modifié 1 fois.
jv2759
Tyrannosaurus Rex
Messages : 4161
Inscription : 12 févr. 2004, 14:29

Message 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...
Xanthor
Lézard à collerette
Messages : 280
Inscription : 29 juil. 2003, 18:36

Message 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
DJiK
Lézard à collerette
Messages : 474
Inscription : 17 févr. 2004, 13:18

Message par DJiK »

Xanthor a écrit :
document.getElementById('total') = total
total est un élément XML ?
Oups, oublié un .value ici. :wink:

J'ai plus d'erreur Javascript en le rajoutant.

Mais en effet, il ajoute les chaines de textes à la suite.
Style 3+4 = 34! :mrgreen:


+= existe bien, et en mettant var total =''; ça évite qu'il mette Undefined34 mais il reste quand m^ 34 et pas 3+4=7!
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59

Message 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
Bobe
Iguane
Messages : 742
Inscription : 28 juil. 2003, 21:29

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

Code : Tout sélectionner

document.getElementById(i)
me laisse à penser que tes attributs id dans le document ne contiennent qu'un chiffre. Un identifiant ne peut commencer par un chiffre.
« La vie d’un geek est un combat perpétuel contre l’imperfection »
DJiK
Lézard à collerette
Messages : 474
Inscription : 17 févr. 2004, 13:18

Message par DJiK »

C'est incroyable, m^ avec ParseInt il continue d'ajouter les chiffres à la queue-leuleu au lieu de les ajouter! :P


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! :oops:
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! :D




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 :cry:
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59

Message 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).
chBok
Iguane
Messages : 991
Inscription : 17 oct. 2003, 19:17

Message par chBok »

Un truc à tester qui peut fonctionner (enfin sur certains compilateurs), c'est de faire :

Code : Tout sélectionner

total += 0.0 + document.getElementById(i).value; 
On force d'entrée à signaler que l'on veut travailler avec une variable float. Essaie toujours.
DJiK
Lézard à collerette
Messages : 474
Inscription : 17 févr. 2004, 13:18

Message 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! :D

Ouf, merci à tous. :wink:


Reste plus qu'à trouver comment n'afficher que 2 décimales! :P
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59

Message par Benoit »

chBok a écrit :Un truc à tester qui peut fonctionner (enfin sur certains compilateurs), c'est de faire :

Code : Tout sélectionner

total += 0.0 + document.getElementById(i).value; 
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) à

Code : Tout sélectionner

total = total + 0.0 + document.getElementById(i).value;
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 :

Code : Tout sélectionner

alert(""+0.0+1)
Par contre, voici pourquoi le parseFloat est finalement nécessaire :

Code : Tout sélectionner

alert(0.0+1+"2")
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).
chBok
Iguane
Messages : 991
Inscription : 17 oct. 2003, 19:17

Message par chBok »

Benoit a écrit :
chBok a écrit :Un truc à tester qui peut fonctionner (enfin sur certains compilateurs), c'est de faire :

Code : Tout sélectionner

total += 0.0 + document.getElementById(i).value; 
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) à

Code : Tout sélectionner

total = total + 0.0 + document.getElementById(i).value;
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 :)
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité