JSCHECKER, VALIDEUR DE FORMULAIRE

cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 - 25 févr. 2008 à 16:24
lakichemole Messages postés 253 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 18 mai 2009 - 6 mars 2008 à 09:24
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/45845-jschecker-valideur-de-formulaire

lakichemole Messages postés 253 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 18 mai 2009
6 mars 2008 à 09:24
et pourquoi "if (oRules[0] != 'undefined')" et pas juste "if (oRules[0])" C'est la même chose non??
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
5 mars 2008 à 23:13
Oué en effet c'est là le probleme :)
En fait j'avais mis ca en pensant que ca corrigerai un probleme. Je l'ai commenté, et je l'ai décommenté juste avant de mettre le code en ligne, pensant que ca ne poserai pas de problemes. Shame on me ;)

C'est ok maintenant ... normalement ! :p
cs_genjikun Messages postés 14 Date d'inscription dimanche 2 mai 2004 Statut Membre Dernière intervention 5 mars 2008
5 mars 2008 à 20:52
Ce qui est marrant, c'est que l'exemple sur le site fonctionne et avec les fichiers sources, ça ne fonctionne pas.
J'ai fait une brève comparaison entre les deux JS.
Il y a ce code en "trop" sur le JS qui ne fonctionne pas.

Fonction this.addrule :

else if (oRules[0] != 'undefined') {
_addRule (eltName, oRules[0]);
}
lakichemole Messages postés 253 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 18 mai 2009
5 mars 2008 à 19:19
A le bo.. bon testeur!! :D
Bonne correction;)
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
5 mars 2008 à 18:44
Jvais regarder ca ! :)
Chez moi j'ai pas d'erreurs mais le formulaire ne marche pas (Chose anormale puisque quand je l'ai posté, il fonctionnait ! :p ^^ !!!)
A mon avis j'ai fait une modif entre temps qui à tout fait planter.

Petite anecdote : Avant la mise à jour, le formulaire n'était jamais validé. Vous voulez savoir pourquoi ? car la fonction onSubmit retournait toujours false ! Forcément ! :p

Je corrige ce bug ce soir et prends en note vos commentaires
cs_genjikun Messages postés 14 Date d'inscription dimanche 2 mai 2004 Statut Membre Dernière intervention 5 mars 2008
5 mars 2008 à 13:58
pareil pour moi sous ie6,ff3b3 (& opera browser :p) ,erreur de javascript au lancement de la age index.html
Ligne 78: rule: (oRule.rule!= null) ? oRule.rule : '',
rule a la valeur null ou n'est pas un objet
lakichemole Messages postés 253 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 18 mai 2009
5 mars 2008 à 13:39
IE 6
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
5 mars 2008 à 13:09
Lakichemole, tu es sous quel navigateur avec cette erreur ?
lakichemole Messages postés 253 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 18 mai 2009
5 mars 2008 à 12:03
Je viens de tester la version finale:
- Au chargement erreur Javascript (deboogeur activé) à la ligne 77:
oRule est null ligne 77 --> "oRule.rule != null"
- Et ma petite date du 30 février qui marche toujours ;)
La dernière ligne droite!!
cs_genjikun Messages postés 14 Date d'inscription dimanche 2 mai 2004 Statut Membre Dernière intervention 5 mars 2008
5 mars 2008 à 11:56
Grand merci a toi !!!! je test ca de suite sous opera mobile :p
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
5 mars 2008 à 05:50
Ca y est !
Mise à jour effectuée ! :)

Alors au programme :
_ Faire en sorte que les emails de type zerze@zerze@zer.zer ne soient pas validée (seulement 1 @)
_ Faire en sorte que seul des ip valides (>255) soient autorisées
_ Code Postal avec plus de 5 nombres ne soient pas acceptés (erreur confirmée :p)
_ Commenter les expressions régulières au maximum
_ Eviter les expressions régulières là ou il n'y en a pas besoin (ok, enfin je pense ! :p)
_ Faire en sorte que l'application soit valide firefox 2, firefox 3 et Ie6 & 7
_ Permettre de valider une regle sans forcément rendre l'élément obligatoire
_ Optimiser (alleger) le code
_ Suppression des Alias pour les fonctions afin : d'alléger le code et éviter les embrouilles

Il ne me reste plus qu'a gerer les éléments de type radio/select/checkbox et comparer des éléments particulier (dates par exemples) et ca devrait etre bon.

Remarquez l'ajout du support du script directement dans le code html, dans la balise alt (allez voir du coté de mon site, le code html à été mis à jour, la balise input pour isRequired utilise cette méthode)

Bon j'avais dit Mardi, mais étant donné que je me suis pas encore couché, pour moi on est toujours mardi.

Bonne nuit :p
cs_genjikun Messages postés 14 Date d'inscription dimanche 2 mai 2004 Statut Membre Dernière intervention 5 mars 2008
3 mars 2008 à 23:06
Ahh cool j'attendai que ça :p
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
3 mars 2008 à 22:50
euh merci ! :)

J'ai des ptits retards sur le temps, les corrections seront faites demain ! :)
rodessard Messages postés 1 Date d'inscription samedi 26 janvier 2008 Statut Membre Dernière intervention 3 mars 2008
3 mars 2008 à 20:51
Merci les gars de vous arracher la tête sur ce genre de problème. Je n'ai absolument aucune base en programmation, mais pour mon boulot, je rêvais que ce genre de truc soit possible... Ca fait maintenant des semaines que je surfe sur tous ces bouts de code et petit à petit, ça commence à prendre forme. Faut dire que où je travaille, on n'extrait pas toujours la quintessence de la matière grise et j'avais parfois l'impression de tomber de Mars... Assez douloureux quand on approche les 50 balais. Avec vous, tout parait simple et si on s'applique, pas à pas, on finit par comprendre et construire quelque chose qui tient la route. Encore Merci.
cs_genjikun Messages postés 14 Date d'inscription dimanche 2 mai 2004 Statut Membre Dernière intervention 5 mars 2008
28 févr. 2008 à 20:56
Donc ca ne fonctionne pas sous firefox 3b3 ?:o
J'ai changer la fonction _onSubmit pour que ca envoi le formulaire, c'est pas trop propre mais c'est une solution à mon probleme
voila la fonction (un truc de ce genre...)

var _onSubmit = function () {
var cpt = 0;
var nb = 0;
for (elementName in _oValidity) {
if (!_oValidity[elementName]) {
_checkRules (elementName);
return false;
}if (_checkRules (elementName)) cpt cpt + 1; else cpt cpt-1;

nb = nb + 1
}
if (nb == cpt) return true; else return false;
}
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
28 févr. 2008 à 20:18
Mise à jour : ca ne marche pas non plus sous firefox 3b3, ce qui est étrange car j'ai programmé ce code sous firefox 3b3 justement !
Bizare :p
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
28 févr. 2008 à 20:04
c'est bizar pour ma part sous firefox 3b3 mon formulaire est validé !?!

Il faudrait aussi faire des tests sur checkbox, radiobutton, listbox, etc.

Mais pour la date je vais voir ce que je peux faire ! :p
cs_genjikun Messages postés 14 Date d'inscription dimanche 2 mai 2004 Statut Membre Dernière intervention 5 mars 2008
28 févr. 2008 à 19:52
Enfin pour ma part, le formulaire n'est pas envoyé avec aucun des navigateurs web situé au dessus (IE 6, IE7, Firefox 2, Firefox 3beta3) même si tout les champs sont à "okay".

Sinon il serait bien de pouvoir faire d'autre tests sur les dates.
Exemple : SI date1 > date2 ALORS ... SINON ...

_De faire des tests sur des "checkbox"
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
28 févr. 2008 à 14:42
Merci c'est gentil ! :)
J'ai oublié une option, mais je sais pas comment je vais pouvoir respecter celle la, mais je vais faire de mon mieux :

_ Optimiser (alleger) le code
lakichemole Messages postés 253 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 18 mai 2009
28 févr. 2008 à 11:35
Bonne synthèse et bon courage :)
jantosze Messages postés 72 Date d'inscription mercredi 29 mai 2013 Statut Membre Dernière intervention 15 mai 2009
27 févr. 2008 à 23:20
yes
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
27 févr. 2008 à 23:02
En effet ! tu a raison, sous firefox 2, ca ne marche pas !
Je vais corriger ca.
Je suis un peu occupé pour le moment.

Je vais donc prendre en note tous vos commentaires et je les appliquerais lundi, je pourrai malheureusement pas avant.

@Jantosze, j'ai un peu de mal à comprendre ton idée, mais de ce que j'ai compris, on dirait plus que tu veux t'approcher d'une sorte de framework beaucoup plus complet non ?

Donc au programme de Lundi :
_ Faire en sorte que les emails de type zerze@zerze@zer.zer ne soient pas valider (seulement 1 @)
_ Faire en sorte que seul des ip valides (>255) soient autorisées
_ Code Postal avec plus de 5 nombres ne soient pas acceptés (erreur confirmée :p)
_ Commenter les expressions régulières au maximum
_ Eviter les expressions régulières là ou il n'y en a pas besoin
_ Faire en sorte que l'application soit valide firefox 2 :p
_ Permettre de valider une regle sans forcément rendre l'élément obligatoire
_ Si vous voyez d'autres éléments ... n'hésitez pas !
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
27 févr. 2008 à 22:54
ah ok je comprends mieux ta demande. En effet ce n'est actuellement pas possible de demander soit rien soit un email. Je vais regarder cela ! :)

Par contre pour le fait que malgré le tout ok, ca te refuse la validation, c'est étrange ! :/
Je regarde ca, mais si tu a plus de détails, tiens moi au courant ! :)
cs_genjikun Messages postés 14 Date d'inscription dimanche 2 mai 2004 Statut Membre Dernière intervention 5 mars 2008
27 févr. 2008 à 22:49
En faite, il me met bien tout à "Okay" en vert, mais le formulaire n'est pas envoyé ! donc pas la possibilité de recuperer les valeurs saisies en php.
Je suis sous windows xp sp2 et au boulot sous w2k sp4.

J'ai bien compris à quoi servait la fonction isRequired.
Mais imaginons qu'il y a un champ "E-mail" non obligatoire, si je fait un submit sans avoir rempli ce champ, il me sortira le message d'erreur.
Je voudrais "zapper" ce test, et faire "si et seulement si" le champ "E-mail" est renseigné, on test sa validité.
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
27 févr. 2008 à 22:40
c'est étrange que ca ne marche pas chez toi alors que ca marche ailleur :p
Tu es sous quel os ? Windows ?

Tester si juste le champ est rempli, tu peux utiliser la fonction isRequired
cs_genjikun Messages postés 14 Date d'inscription dimanche 2 mai 2004 Statut Membre Dernière intervention 5 mars 2008
27 févr. 2008 à 21:24
ah oui y a t-il possibilité de faire un test seulement si le champ est rempli ?
cs_genjikun Messages postés 14 Date d'inscription dimanche 2 mai 2004 Statut Membre Dernière intervention 5 mars 2008
27 févr. 2008 à 21:13
jai firefox 2.0 et j'ai tester avec ie 6 et firefox 3 beta3, ca ne fonctionne aussi
on dirait que la fonction _onSubmit() retourne toujours false
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
27 févr. 2008 à 20:07
@Genjikun : Merci de t'intéresser à mon code :)
tu a quel navigateur ? (nom et version)
cs_genjikun Messages postés 14 Date d'inscription dimanche 2 mai 2004 Statut Membre Dernière intervention 5 mars 2008
27 févr. 2008 à 20:01
Bonjour,

J'ai tester l'exemple via le lien que tu as indiqué. Lorsque je clique sur "submit" rien ne se passe, même si tout les champs sont remplis correctement.
Est-ce normal ?
jantosze Messages postés 72 Date d'inscription mercredi 29 mai 2013 Statut Membre Dernière intervention 15 mai 2009
27 févr. 2008 à 15:53
Salut CODEFALSE,

Concernant IsPopstal, c'est très simple j'écris 7555555588888 et je passe au champ suivant avec le OK. J'ai regardé le code qui se résume à une expression régulière /[9-0]{5}/ qui match la chaîne, j'ai essayé \d mais le même problème persiste. Je ne m'explique pas le résultat ...

isPostal : 4545454544555 Okay :) .

Concernant la fonction d'initialisation.
Tu as écrit pratiquement un composant, l'idée que je te soumets est effectivement une "encapsulation" des fonctions par un point d'entrée principal permettant l'ajustement de la langue des messages mais aussi simplifier la partie HTML.
lakichemole Messages postés 253 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 18 mai 2009
27 févr. 2008 à 10:10
Tu n'es pas obligé de n'utiliser que des expressions régulières :)
C'est vrai que se sera "moin beau" mais pour ma part, et c'est le problème qu'on a dans ma boite sur un gros projet, je préfère un truc performant et maintenable facilement qu'un tru fait pour la beauté du geste!
la métaphore utilisé par un de mes collègue :
"Tu voit pour leur projet c'est comme si on te demande de traverser le boulevard périphérique et que au lieu de prendre le bus tu fabrique une machine pour te téléporter"
Je trouve que ça résume bien :D
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
27 févr. 2008 à 09:32
Merci de vos conseils :)
Je vais essayer de commenter les expressions régulières au mieux, corriger l'email et le zip code, bien que ce dernier m'étonne, comment tu a fait pour entrer plus de 5 digits avec un ok ??!?!!
Par contre l'expression régulière pour les ip, si je veux me limiter au 255, risque de devenir tres longue ! Je vais voir

Gerer le mois de février non plus, c'est pas possible en expression régulière (enfin !, pas "facilement" possible :p)

@Jantosze, que veux-tu dire par une fonction initJsChecker ? je vois pas ce qu'elle doit charger. Tu veux dire des messages préfait, qui, en fonction du langage du navigateur, seraient adaptés (anglais, francais, etc ?)
jantosze Messages postés 72 Date d'inscription mercredi 29 mai 2013 Statut Membre Dernière intervention 15 mai 2009
26 févr. 2008 à 15:58
Salut,

Merci pour cette démo de mise en œuvre des expressions régulières.

Avec IsPostal, bien que l'expression régulière me convienne, je suis capable de rentrer un zipcode > à 5 digits avec un superbe Okay :)???

Juste une remarque, n'est il pas préférable d'intégrer une fonction InitJsChecker(langage) dans jschecker.js qui serait appelée lors du onload et qui permettrait de charger un type de langage pour les messages et épurer la partie hml?

cdt
JAN
lakichemole Messages postés 253 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 18 mai 2009
26 févr. 2008 à 10:49
Salut,
Tout d'abords joli travail :)
Quelques points à améliorer tout de même sinon ça serait pas marrant :)
- Des petits commentaires pour les expressions régulière serait top.
- Pour l'email: j'ai pu rentrer l'adresse suivante : test@test@test.com qui n'est pas un email
- 192.168.1.257 n'est pas une adresse IpV4
- 29/02/2009 n'est pas une date valide (30/02/2008 passe aussi)

Voilà pour ton prochain patch :). J'ai trop galérer moi même avec ce genre de truc dans mon ancienne boite donc je sais les détails qu'on peut oublier/passer la première fois.
PS: dsl pour l'orthographe.
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
25 févr. 2008 à 16:32
merci de ton commentaire :)
Merci aussi pour l'info sur la comptabilité :)

Des regrets, c'est la meilleure partie, c'est ce qui fait que le code évolue dans le bon sens.

Le Alt sur le textarea, pas testé en effet, faudra que je regarde ca (quand ca marchera :p)
Pour le onblur, si tu remplis rien, il t'indique la premiere erreur, puis la seconde, puis etc.
Il ne fait pas toutes les erreurs d'un coup pour quelques raisons :
_ Généralement l'indicateur d'erreur est centralisé (en bas ou en haut du formulaire) et non à proximité du champs comme dans l'exemple
_ C'est surtout pour une histoire de rapidité. A la base, mon onSubmit bouclait sur tous les éléments ayant une regle et en affichait leur erreur. Le probleme c'est que il y avait environ 2 à 3 secondes entre le moment de l'appui et la validation du formulaire. Bizzarement, Ie7 validait quand meme le formulaire si une erreur apparaissait dans les derniers champs (temps d'attente trop long ?)
Du coup j'ai préféré m'arreter dès qu'une erreur apparait, et ne pas boucler sur tous les tests, mais sur un indicateur booleanesque :p

Tu ne m'a peut-etre pas aidé sur 90% du code, mais tu m'a quand meme aidé, donc tu mérite d'être cité :)
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
25 févr. 2008 à 16:24
pas eu le loisir de "regarder de près", mais une
manière de faire bien plus que très très intéressante.

pour les dernières version d'Opera, de Safari,
de K-Meleon, ça à l'air de leur plaire..

regrets ? ( il en faut ! )
_ alt fonctionnera-t-il sur un textarea par exemple ?
_ onblur oui, mais si on ne "passe pas sur les champs",
pas d'erreurs signalées. je m'explique : au pire, on ne
remplit rien, on clique sur submit et seul
isEqual (to : "hello") : The field isEqual is required
apparait.

[ pour n'avoir aiguillé que, très partiellement, sur 1 ou
2 questions, je ne méritais vraiment pas d'être cité ! ]

Cordialement.
Rejoignez-nous