98d4ac7bf1aea89c981eb2e27e47e5ea

Bonjour,

N'étant pas un expert en JS, je voulais savoir si ma fonction JS ne pouvait (devait) pas être amélioré ... voici mon code:

D'avance merci

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
function calcVitesse(){
   var tempsTab = document.forms.adminForm.temps.value.split(':');
   var kilometrage = document.forms.adminForm.kilometrage.value;
   var temps = 0;
   
   for(i = 0; i < tempsTab.length; i++){
      // Conversion de la valeur en entier
      var t = parseInt(tempsTab[i]);
      // Teste si la valeur est un chiffre

      if(isNaN(t)){
         alert('Seuls les chiffres sont acceptés');
         return(false);
         }
         
      // Teste si les minutes et (ou) les secondes sont comprises entre 0 et 59
      if(i != 0 && tempsTab[i] > 59){
         alert('Les minutes ou les secondes ne peuvent excéder 59');
         return(false);
         } else {

         // Cumul du temps
         heure = ( Number( tempsTab[0] ) * 3600);
         minute = ( Number( tempsTab[1] ) * 60 );
         seconde = ( Number( tempsTab[2] ));
         temps = heure + minute + seconde;

         moy = (temps / kilometrage);
         moyH = (Math.floor(moy/3600));
         moyM = (Math.floor((moy - (moyH * 3600))/60));
         moyS = (Math.floor(moy - ((moyH * 3600) + (moyM * 60))));
         
         moyH = (moyH < 10) ? '0' + moyH : moyH ;
         moyM = (moyM < 10) ? '0' + moyM : moyM ;
         moyS = (moyS < 10) ? '0' + moyS : moyS ;

         moyenne = moyH + ':' + moyM + ':' + moyS;
         vitesse = (Math.floor((kilometrage / (temps / 3600))*1000))/1000;
         //alert ('moyenne ' + moyenne);
         
         document.forms.adminForm.moyenne.readonly = false;
         document.forms.adminForm.moyenne.value = moyenne;
         document.forms.adminForm.moyenne.readonly = true;
         
         document.forms.adminForm.vitesse.readonly = false;
         document.forms.adminForm.vitesse.value = vitesse;
         document.forms.adminForm.vitesse.readonly = true;
           }
     }
   } 

Refactorings

No refactoring yet !

5a00a3a98dcf6f9cd717440fd2b606e5

Eineki

November 30, 2007, November 30, 2007 21:50, permalink

No rating. Login to rate!

Hi, think there is an error in your code:
In the for cicle you check tempsTab elements for errors (lines 11, 17)
but then you use (lines 23-25) tempsTab out of the box (In the first run you check tempTabs[0] and use tempsTab[1] and tempsTab[2]).

One last thing: the input readonly property is intended for the user, not for javascript.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
function calcVitesse(){
  var form = document.forms.adminForm;
  var result = doCalcVitesse(form.temps.value, form.kilometrage.value)
  if (typeof(result) == 'string') {
    alert(result);
  } else {
    form.moyenne.value=result[0];
    form.vitesse.value=result[1];
  }
}

function doCalcVitesse(temps, kilometrage){

  var tempsTab = temps.split(':');
  var seconde=0;
  var moy=0;

  if (tempsTab.length != 3) {
    return ('Temps acceptépas');
  }

  for(i = 0; i <3; i++)   {
    // Conversion de la valeur en entier
    var t = parseInt(tempsTab[i]);
    // Teste si la valeur est un chiffre
    if(t != tempsTab[i]){
      return ('Seuls les chiffres sont accepté');
    }
    // Teste si les minutes et (ou) les secondes sont comprises entre 0 et 59
    if(i != 0 && t > 59){
      return ('Les minutes ou les secondes ne peuvent excér 59');
    } else {
      seconde = seconde * 60 + t;  // Cumul du temps
    }
  }

  moy = seconde / kilometrage;

  moyH = (Math.floor(moy/3600));
  moyM = (Math.floor((moy - (moyH * 3600))/60));
  moyS = (Math.floor(moy - ((moyH * 3600) + (moyM * 60))));
         
  moyenne = [ (('0'.concat(moyH)).substr(-2)), 
              (('0'.concat(moyM)).substr(-2)), 
              (('0'.concat(moyS)).substr(-2)) ];
  moyenne = moyenne.join(':');
//  vitesse = (Math.floor((kilometrage / (seconde / 3600))*1000))/1000;
  vitesse = Math.floor(kilometrage / (seconde / 3600));

  return new Array( moyenne, vitesse);
}
Bfec5f7d1a4aaafc5a2451be8c42d26a

macournoyer

December 1, 2007, December 01, 2007 20:27, permalink

No rating. Login to rate!

Sorry Eineki about the problem you had editing your post, should be fixed now.

Let me know if you're still having problems.

98d4ac7bf1aea89c981eb2e27e47e5ea

Sebe

December 1, 2007, December 01, 2007 22:31, permalink

No rating. Login to rate!

I do not have really a problem but, like Eineki says it, my code uses bad variables!

I would like to separate my function in 2 news. One, other calculation… how do I have test to do all that?

Afflicted, I do not speak English!
////////////////////////////////////////////////////////////////

Je n'ai pas vraiment de problème mais, comme Eineki le dit, mon code utilise de mauvaises variables !

Je voudrais séparer ma fonction en 2 nouvelles. L'une teste, l'autre calcul ... comment dois-je faire tout cela ?

Désolé, je ne parle pas anglais !

Your refactoring





Format Copy from initial code

or Cancel