Probleme avec fonction javascript.

Probleme avec fonction javascript. - HTML/CSS - Programmation

Marsh Posté le 04-12-2012 à 15:37:08    

Bonjour à tous,
 
Je rencontre un petit probleme avec une fonction javascript dans un formulaire.
Je souhaite verifier avant envoi du formulaire les valeurs saisies par l'utilisateur.
 
le champ du formulaire (VAL) doit être numérique et comporter plus de 12 caracteres (j'ai mis ces conditions pour mes tests, mais réellement, les vérifications devraient être valeur numérique obligatoire et valeur supérieur à 0.5)
 
Voici le code de la fonction, de la zone de saisie ainsi que du bouton submit
 

Code :
  1. Fonction JS :
  2. <!-- Script verification valeur nombre d'heures -->
  3. <script>
  4. function verif_VAL(VAL) {
  5.   champ = document.getElementById("VAL" );
  6.   var valeur = champ.value;
  7. if(!(/^\d+$/.test(valeur))) {
  8.     alert("Le nombre d'heure doit être une valeur numérique" );
  9. return false;}
  10. if(valeur.length<12) {
  11.     alert("Test : la valeur saisie (nombre d'heures) fait moins de 12 caractères..." );
  12. return false;}
  13. else
  14. {
  15. return true;
  16. }
  17. }
  18. </script>
  19. <!-- Fin du script verification nolbre d'heures -->
  20. Balise du formulaire
  21. <tr>
  22.  <td>Nombre d'heures (1/2 heure = 0.5)  :</td>
  23.  <td><input type="text" require="true" id="VAL" label="Veuillez saisir le nombre d'heures" value="" name="nbr_minutes" /></td>
  24. </tr>
  25. Bouton de validation :
  26. <input type="submit" name="validation_finale" size="5" value="Ajouter" onClick="verif_VAL('VAL');" />


 
 
Les alertes fonctionnent bien mais le return false; n'a aucun effet et le formulaire est tout de même envoyé....
 
Merci d'avance pour votre aide !

Reply

Marsh Posté le 04-12-2012 à 15:37:08   

Reply

Marsh Posté le 04-12-2012 à 16:56:38    

peut être en utilisant

Code :
  1. onClick="return verif_VAL('VAL');"


?

 

Sinon en plaçant la vérification non pas sur le onClick du submit, mais plutôt sur le onSubmit du formulaire

 

Edit : au passage, attention sur la ligne :

Code :
  1. champ = document.getElementById("VAL" );
 

Le VAL est correct car cette valeur "en dur" correspond également au nom du champ input, mais j'imagine qu'à la base l'idée était d'utiliser la variable VAL reçue en paramètre dans la fonction, auquel cas il faudrait retirer les doubles quotes


Message édité par x1fr le 04-12-2012 à 17:03:26

---------------
Origin / PSN / Steam / Uplay : x1fr - bnet : Fab#2717
Reply

Marsh Posté le 04-12-2012 à 17:13:42    

merci x1fr ! en mettant return sur le onclick c'est good !!!
 
il faut néanmoins que je revois l'expression reguliere pour n'avoir que du numérique, sachant que la valeur mini est 0.5 ou 0,5. Celle que j'ai mise actuellement pose probleme avec le point ou la virgule....

Reply

Marsh Posté le 04-12-2012 à 17:52:09    

t'as essayé de regarder du coté de jquery?


---------------
Origin / PSN / Steam / Uplay : x1fr - bnet : Fab#2717
Reply

Marsh Posté le 04-12-2012 à 19:07:25    

Tu pourrais à la rigueur faire un replace de la , par un . et tester simplement l'égalité par un parseFloat:  
 
valeur == parseFloat((valeur+"" ).replace(/,/g,'.'));


---------------
Blablaté par Harko
Reply

Marsh Posté le 05-12-2012 à 10:38:39    

POurriez vous m'expliquer ce qui cloche la dedans. J'ai essayé de faire 2 verif distinctes (je sais, c'est un peu bourrin, mais c'etait pour comprendre le fonctionnement !!
 

Code :
  1. <script>
  2. function verif_VAL(VAL) {
  3.   champ = document.getElementById("VAL" );
  4.   var valeur = champ.value;
  5. if(!(/^[0-9\.\,]+$/.test(valeur))) {
  6.     alert("Le nombre d'heure doit être une valeur numérique" );
  7. return false;}
  8. if(valeur<'0,5') {
  9.     alert("La récupération minimale est d'une demi heure (soit 0.5)" );
  10. return false;}
  11. if(valeur<'0.5') {
  12.     alert("LAAAAAAAAAAAAAAAAAAAAAAA récupération minimale est d'une demi heure (soit 0.5)" );
  13. return false;}
  14. else
  15. {
  16. return true;
  17. }
  18. }
  19. </script>


 
en fait si je saisi 0.5, c'est ok, 0.4 la fonction m'indique bien que la valeur est en dessous du quota défini. par contre si je met 0,4 ou 0,5 alors j'ai l'alert JS qui se declenche...et bizarrement, l'alerte est celle de la 2e verif (celle avec tous les AAAAA) qui devrait verifier pour le point et non la virgule ?
 
Merci pour votre aide !
 
 
edit : en fait je viens de voir que ma fonction doit etre legerement differente... je test uniquement les valeurs inferieures à 0.5 (ou 0,5)... mais je dois "brider" la saisie avec 0.5 en mini et les valeurs superieures doivent etre des nombres entiers OU par demi... (valeur correctes : 0.5,1,1.5,2,2.5,3,3.5,......). si on saisie 2.1 ou 2,1 je dois bloquer.... je pense que ca va etre un peu plus compliqué que ce que je pensais....


Message édité par mozvillat le 05-12-2012 à 10:50:37
Reply

Marsh Posté le 05-12-2012 à 10:59:02    

Code :
  1. function verif_VAL(VAL) {
  2.    champ = document.getElementById("VAL" );
  3.   var valeur = champ.value;
  4.   var cleanedValeur = (valeur+"" ).replace(",","." )*1;
  5.   if(!isNaN(cleanedValeur)) {
  6.       alert("Le nombre d'heure doit être une valeur numérique" );
  7.       return false;
  8.   }
  9.   if(cleanedValeur<0.5) {
  10.       alert("La récupération minimale est d'une demi heure (soit 0.5)" );
  11.       return false;
  12.   }
  13.   return true;
  14. }


 
Voila, on fait pas des tests d'infériorité ou supériorité avec des strings versus des nombres :)


---------------
Blablaté par Harko
Reply

Marsh Posté le 05-12-2012 à 11:29:48    

Merci ! par contre j'ai modifié la ligne

Code :
  1. if(!isNaN(cleanedValeur)) {


par

Code :
  1. if(isNaN(cleanedValeur)) {


 
Sinon il attendait toujours une valeur non numerique !!!!!
 
Mais c'est pas grand chose !!!
 
Sais tu si il existe une fonction JS qui permettrait de tester le nombre pour n'avoir que des nombres entiers ou se finissant par .5 (ou,5) ?

Reply

Marsh Posté le 05-12-2012 à 11:33:07    

ah oui désolé


---------------
Blablaté par Harko
Reply

Marsh Posté le 05-12-2012 à 11:37:21    

bah en passant par une regexp :

 
Code :
  1. function isFullOrDot5(valeur) {
  2. return /^\d+([,.]5)?$/.test(valeur+"" );
  3. }


Message édité par gatsu35 le 05-12-2012 à 11:37:33

---------------
Blablaté par Harko
Reply

Marsh Posté le 05-12-2012 à 11:37:21   

Reply

Marsh Posté le 05-12-2012 à 11:52:13    

Merci pour votre aide, je vais regarder pour integrer la regex dans une condition (if) afin de tester.
 
C'est dans ces moments la que je me rends compte que je suis vraiment une buse en JS !!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed