11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous.

J'ai sur une page des champs textes disposés en ligne, ne pouvant comptenir que des chiffres.
j'ai fait une fonction en javascript qui me calcule le total par lignes des champs renseignés. (j'ai une autre fonction semblable me calculant le total par colonne)
Il marche très bien, lorsque les visiteurs écrivent dans le formulaire dans le sens "normal", c'est à dire de la gauche vers la droite (ou du haut vers le bas pour les colonnes)
Or lorsque par exemple quelqu'un commence sa saisie par le dernier nombre, puis décide de renseigner le 2eme.... cela fausse totalement le résultat... les valeurs semblent écrasées..
comment puis je faire, en modifiant ce script pour que ce problème disparraisse?

je ne pense pas qu'il y ait grand chose à modifier... peut etre allez vous le voir direct..
merci..

fonction du total par ligne:
 
function majligne(numeTabl,numeLign,nombColo) 
  { 
   var i=0; 
  
   var vale; 

   var somm=0; 


   while(++i<=nombColo) 
      { 
      vale=Number(document.Form["qte_"+numeTabl+"_"+numeLign+"_"+i].value); 
      if(isNaN(vale)===false) 
         { 
         somm+=vale; 
         } 
      
    } 
   document.Form["resultat_"+numeTabl+"_"+numeLign].value=somm; 
  } 
 


code générré :

 
<input type="text" name="qte_1_0_1" onChange="majligne(1,0,1); majCol(1,0,1);" />   <input type="text" name="qte_1_0_2" onChange="majligne(1,0,2); majCol(1,0,1);" /> etc... 



merci
Modifié par falz (20 Oct 2006 - 19:29)
C'est peut-être la conséquence d'un bug connu depuis longtemps avec isNaN.
Une chaîne vide ou ne contenant que des espaces est considérée comme nombre (et renvoie donc false) avec isNaN.
Par contre, une tentative de conversion de cette même chaîne avec parseInt ou parseFloat renvoie Number.NaN, et donc, n'est pas un nombre.
N'importe quelle opération mathématique impliquant un nombre quelconque et NaN renvoie toujours NaN. Ainsi donc tu dois probablement te retrouver avec NaN comme résultat final...
Je te laisse corriger, si c'est ça. Je ne peux pas en être sûr, il faudrait une page de test.