Page 1 sur 2

onblur peut-il déclencher 2 évenements ?

Posté : 20 déc. 2006, 00:32
par Sebe
Salut,

Je ne suis pas un pro du javascript et je me demande si la commande onblur peut servir de déclencheur à 2 événements !

Quelques expliquations s'imposent !
J'utilise une fonction sur différents champs dont le champs temps3
<input type="text" name="tempsp3" id="tempsp3" value="00:00:00" size="6" maxlength="8" onblur="calcVitesse(this, 3);" />
qui me donne le résultat attendu en me renvoyant une moyenne dans un autre champs ... comment faire, par la même occasion, pour qu'il m'envoit un autre calcul sur un autre champs ?

La fonction est "calcvma"

Merci bcq

Posté : 20 déc. 2006, 00:44
par Truc
Salut,

Tu peux aligner les appel de fonctions dans les événements :
onblur="calcVitesse(this, 3);calcvma();"

Posté : 20 déc. 2006, 00:49
par Sebe
Un grand merci ... cela ne fonctionne pas mais c'est certainement une erreur dans mon script !

Merci beaucoup

Posté : 20 déc. 2006, 01:33
par Truc
Un grand merci ... cela ne fonctionne pas
:langue:
Et demain je reviens avec d'autres fausses histoires de programmation :lol:

Ceci dit c'est tout de même Résolu apparemment :-k

Posté : 20 déc. 2006, 10:09
par Sebe
Salut,
Et demain je reviens avec d'autres fausses histoires de programmation :lol:

Ceci dit c'est tout de même Résolu apparemment :-k
Non cela ne fonctionne pas chez moi mais je pense que c'est une erreur dans ma 2e fonction Javascript ; étant nul part dans ce language, j'ai fait un recopiage de la 1er qui fonctionnait et je n'ai pas eu le temps depuis de bien y regarder (décortiquer) ... jusqu'à maintenant, j'avais réussis à y faire quelques changements mais je ne suis pas encore arrivé à être l'heureux papa d'une fonction complète :lol:

Pour plus d'expliquations:
Je récupére la variable temps comme indiqué plus haut
<input type="text" name="tempsp3" id="tempsp3" value="00:00:00" size="6" maxlength="8" onblur="calcVitesse(this, 3); calcvma(this, 1);" />
et 2 fonctions interviennent 'calcVitesse' et 'calvma' (la dernière ne fonctionne pas)
// **************************** Fonction test des champs temps ****************************
function verifTemps(chpTemps){
     var tempTab = chpTemps.value.split(':');
     var temps = 0;
     for(i = 0; i < tempTab.length; i++){
          // Conversion de la valeur en entier
          var t = parseInt(tempTab[i]);
          // Teste si la valeur est un chiffre
          if(isNaN(t)){
          	alert('Seuls les chiffres sont acceptés');
             	chpTemps.value = '00:00:00';
             	chpTemps.focus();
             	return(false);
         	}
          // Teste si les minutes et (ou) les secondes sont comprises entre 0 et 59
          else if(i != 0 && tempTab[i] > 59){
          	alert('Les minutes ou les secondes ne peuvent exéder 59');
             	chpTemps.value = '00:00:00';
             	chpTemps.focus();
             	return(false);
          }
          else
          {
              // Cumul du temps
          	temps = (( Number( tempTab[0] )) 
                     + ( Number( tempTab[1] ) / 60 )
                     + ( Number( tempTab[2] ) / 3600 ) ) ;
              // alert(temps);
          	// Si cumul <= 0 return faux (invalide)
              if(temps <= 0) {
              	alert('Le temps doit être supérieur ou égal à une seconde');
                  chpTemps.value = '00:00:00';
                  chpTemps.focus();
                  return(false);
                }else{
                    return temps;
              	} 
           }
     }
}
// **************************** Fin de la fonction test des champs temps ****************************




// **************************** Fonction test des champs FC ****************************
function verifFc(chpFc) {
	var fcTab = chpFc;
	var fc = Number(chpFc.value);
	// alert (fc);
	if(fc < 20 || fc > 220){
    	alert('La FC doit être comprise dans des limites raisonnables !');
        chpFc.value = '0';
        chpFc.focus();
        return(false);
    	}
}
// **************************** Fin de la fonction test des champs FC ****************************




// **************************** Fonction de calcul de la Vitesse en m/min ****************************
function vitesse(tempsp, $palier)
	{
		if(tempsp != 0)
     		{
           	return ((Math.round((($palier/tempsp) / 60  ) * 100 )) / 100);
     		}
		else{
           return (false);
     		}
	} 

function calcVitesse(chpTemps, v_field)
{
         var temps = verifTemps(chpTemps);
         // alert(temps);
         if (temps)
         {
               switch (v_field){
                    case 1 : 
          			vitesse1 = (800 / Number(temps) / 60);
          			document.forms.test.vitesse1.readonly = false;
          			document.forms.test.vitesse1.value = String( vitesse1 );
          			document.forms.test.vitesse1.readonly = true;
                    break;
					
                    case 2 :
					$palier = 800;
					vitesse2 = vitesse(temps, $palier);
                    document.forms.test.vitesse2.readonly = false;
                    document.forms.test.vitesse2.value = String( vitesse2 );
                    document.forms.test.vitesse2.readonly = true;
                    break;
          
                    case 3 :
          			$palier = document.forms.test.palier3.value;
          			vitesse3 = vitesse(temps, $palier);
					document.forms.test.vitesse3.readonly = false;
          			document.forms.test.vitesse3.value = String( vitesse3 );
          			document.forms.test.vitesse3.readonly = true;
                    break;
              }
         }
}
// **************************** Fin de la fonction de calcul de la Vitesse en m/min ****************************




// **************************** Fonction de calcul de la VMA en km/h ****************************
// ne fonctionne pas !
function vma(tempsp, $palier)
{
	if(tempsp != 0)
     {
          return ((Math.round((($palier/tempsp)  )  )) / 100);
     }else{
          return (false);
     }
} 

function calcvma(chpTemps, v_field)
{
         var temps = verifTemps(chpTemps);
         // alert(temps);
         if (temps)
         {
               switch (v_field){
                    case 1 : 
          			$palier = document.forms.test.palier3.value;
					tvma = vma(tempsp, $palier);
          			document.forms.test.tvma.readonly = false;
          			document.forms.test.tvma.value = String( tvma );
          			document.forms.test.tvma.readonly = true;
                    break;
              }
         }
}		
// **************************** Fin de la fonction de calcul de la VMA en km/h ****************************
les valeurs sont retournés au formulaire ainsi
<input id="vitesse3" name="vitesse3" value="" size="4" maxlength="6" readonly/>
pour la fonction 1
<input id="tvma" name="tvma" value="" size="4" maxlength="6"/>
pour la 2e fonction ... c'est bien celle-ci qui ne retourne rien !

J'ai mis [Réglé] parce que je suis persuadé, même si cela ne me retourne encore rien, que tu sais ce que tu as avancé comme solution ... tu n'as pas fait d'expérience sur moi ? J'avais fait quelques recherches sur le net et n'ai vu nulpar comment activé 2 événements avec 'onblur' !

Encore merci

NB: Semblant de rien, j'ai collè mon code au cas où une erreur saute aux yeux des lecteurs :roll:

Posté : 20 déc. 2006, 10:57
par Xenon_54
As-tu des erreurs à la console Javascript sous Firefox?
Si oui, quelles sont-elles?

Posté : 20 déc. 2006, 11:21
par Sebe
Salut,
As-tu des erreurs à la console Javascript sous Firefox?
Si oui, quelles sont-elles?
Non aucune erreur, il ne me retourne simplement rien et il devrait me retourner une valeur comme '17,09 km/h' !

On peut voir ici en mettant la valeur du palier 3 sur '3000' et le temps sur '00:10:32' ... la moyenne est égal à 284.81 m/min mais pas de VMA !

Merci

Posté : 20 déc. 2006, 11:26
par Xenon_54
C'est quoi ces trucs là? ($)

Code : Tout sélectionner

$palier = 800; vitesse2 = vitesse(temps, $palier);

Posté : 20 déc. 2006, 11:28
par zeus
Je pense que le soucis vient plutot de ta fonction JS

Essaye en mettant des alert() régulier pour voir ou ta fonction ne fait pas ce que tu attends

Posté : 20 déc. 2006, 11:29
par Xenon_54
Bonne idée pour les alertes. Question de tracer les changements et récupération de valeurs.

Cependant, je suis intéressé par ces signes de dollars en javascript.

Posté : 20 déc. 2006, 11:40
par zeus
Effectivement, je suis d'accord avec Xenon_54, la présence de $ dans le code JS est souvent due à un amalgame avec le code PHP ;)

Posté : 20 déc. 2006, 11:51
par Sebe
Salut,
Effectivement, je suis d'accord avec Xenon_54, la présence de $ dans le code JS est souvent due à un amalgame avec le code PHP ;)
Je confirme que mon code a été, dans un premier temps, écrit en PHP mais comme le javascript a un plus beau rendu ... voilà le pourquoi de la transformation !

Maintenant, je suis vraiment nul part en javascript; je lis, je reçois des tuyaux et des coups de mains et j'improvise ... peut-être dois-je penser mon code autrement ! ? !

Merci

Posté : 20 déc. 2006, 12:05
par Sebe
Re,
Essaye en mettant des alert() régulier pour voir ou ta fonction ne fait pas ce que tu attends
J'ai fait ceci (voir 2e partie de la fonction):
// **************************** Fonction de calcul de la VMA en km/h ****************************
// ne fonctionne pas !
function vma(tempsp, $palier)
{
	if(tempsp != 0)
     {
          return ((Math.round((($palier/tempsp)  )  )) / 100);
     }else{
          return (false);
     }
} 

function calcvma(chpTemps, v_field)
{
         var temps = verifTemps(chpTemps);
         alert(temps);
         if (temps)
         {
               switch (v_field){
                    case 1 : 
          			$palier = document.forms.test.palier3.value;
					alert($palier);
					tvma = vma(tempsp, $palier);
          			alert(tvma);
					document.forms.test.tvma.readonly = false;
          			document.forms.test.tvma.value = String( tvma );
          			document.forms.test.tvma.readonly = true;
                    break;
              }
         }
}		
Toutes fonctionne sauf l'alert(tvma) ne donne rien ... donc le problème vient de là quelque part grrrrrrr !

Posté : 20 déc. 2006, 12:07
par zeus
le problème peut, selon moi, se situer à plusieurs niveaux :
- le switch (v_field) qui ne passe jamais dans le case 1. Essaye d'afficher v_field pour en être sûr. NB : essaye de comparer v_field à une chaine de caractère ('1') et non pas un entier (1)
- la fonction vma() qui ne rend jamais la main

Posté : 20 déc. 2006, 12:11
par Ajoloca
Bonjour,

Dans cette ligne

Code : Tout sélectionner

tvma = vma(tempsp, $palier);
d'où sort la variable tempsp ???