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 !
Eineki
November 30, 2007, November 30, 2007 21:50, permalink
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.
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);
}
macournoyer
December 1, 2007, December 01, 2007 20:27, permalink
Sorry Eineki about the problem you had editing your post, should be fixed now.
Let me know if you're still having problems.
Sebe
December 1, 2007, December 01, 2007 22:31, permalink
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 !
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