Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

TESTER UN FORMULAIRE EN JAVASCRIPT


Information sur la source

Catégorie :Formulaire Classé sous : teste, formulaire, email Niveau : Débutant Date de création : 05/10/2006 Date de mise à jour : 22/12/2008 08:57:38 Vu : 21 867

Note :
7,17 / 10 - par 6 personnes
7,17 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (19)
Ajouter un commentaire et/ou une note

Description

voici la refonte du code que j'avais déjà réalisé il y a quelque temps, mais qui je l'avoue n'était pas optimum.
Cette fonction à été testé sous Mozilla Firefox et Microsoft Internet Explorer.

Celui-ci offre la possibilité de tester tout les types de champs de formulaire qui pour vous  sont  obligatoire.

Pour différencier les champs obligatoires des non obligatoires, le nom du champs obligatoire devra porter la mention « test- » c'est à cette partie du nom que la fonction va les différencier.
Exemple de champs obligatoire : input type="text" name="test-nom-du_champ"

Affin de valider les emails utiliser la mention « test-email- »
Exemple de champs obligatoire avec test d'email : input type="text" name="test-email-nom-du_champ"

La fonction teste maintenant les champs de type radio, checkbox et select (simple et multiple)

Pour les champs de type radio, si vous en avez plusieurs lot de suite qui ne font pas partie de la même question, la fonction va les distinguer et les traiter séparément.

Pour les champs de type select la fonction va tester si au moins une des options est choisi.
Mais si vous disposez d'une (ou plusieurs) option par défaut qui a pour valeur null ou -1 la fonction la considère comme non sélectionné.
Exemple
option value="-1" ----------------- /option
La première option même sélectionné ne sera pas prise en compte.

pour le tester en live c'est par ici : http://labo.mon-beulogue.com/teste_formulaire_javascript/

 

Source

  • function checkForm(els){
  • var els = els.elements; // éléments du formulaire
  • var regEx =/^test-(.+)/; // expression régulière testant si le champs est à valider
  • for ( var i = 0 ; i < els.length ; i++ ) { // on boucle sur les éléments du formulaire
  • if(regEx.test(trim(els[i].name.toString()))){ // test si le champs est à valider
  • switch(els[i].type){ //Chaque élément à son test personnalisé
  • //test des champs de type text
  • case "text":
  • if(trim(els[i].value).length <= 0){
  • alert("vous devez remplir le champs de text");
  • els[i].focus();
  • return false;
  • }else{ // test si c'est un champs contenant un email
  • regExEmail = /^test-email-(.+)/;
  • if(regExEmail.test(trim(els[i].name.toString()))){
  • if(!isEmail(els[i].value)){
  • alert("l'email saisie est invalide");
  • els[i].focus();
  • return false;
  • }
  • }
  • }
  • break;
  • //test des champs de type textarea
  • case "textarea":
  • if(trim(els[i].value).length <= 0){
  • alert("vous devez remplir le champs de text");
  • els[i].focus();
  • return false;
  • }
  • break;
  • //test des champs de type file
  • case "file":
  • if(trim(els[i].value).length <= 0){
  • alert("vous devez envoyer un fichier");
  • els[i].focus();
  • return false;
  • }else{
  • //test si l'extention est valide
  • if( /^(.+)\.(pdf|jpg|gif|avi)/i.test(trim(els[i].value.toLowerCase())) == false){
  • alert("vous n'avez pas choisi le bon type de fichier");
  • els[i].focus();
  • return false;
  • }
  • }
  • break;
  • //test des champs de type radio
  • case "radio": // test pour les champs radio
  • var test = false;
  • var nom_champ = els[i].name; // si des champs radio se suivent et ne porte pas le même nom on les traites séparément
  • // on boucle sur les champs radio pour savoir si au moins un champs est sélectionné
  • while(els[i].type == "radio" && nom_champ == els[i].name){
  • if(els[i].checked){
  • test = true;
  • }
  • i++;
  • }
  • i--;
  • if(!test){
  • alert("vous devez sélectionner une option radio");
  • els[i].focus();
  • return false;
  • }
  • break;
  • //test des champs de type checkbox
  • case "checkbox":
  • if(!els[i].checked){
  • alert("vous devez sélectionner une option chekbox");
  • els[i].focus();
  • return false;
  • }
  • break;
  • //test des champs de type select où une seul sélection est possible
  • case "select-one":
  • var test = false;
  • for(var x=0; x < els[i].length; x++){
  • if(els[i][x].selected && els[i][x].value != '-1'&& trim(els[i][x].value) != ''){
  • test = true;
  • }
  • }
  • if(!test){
  • alert("vous devez sélectionner une option dans la liste déroulante");
  • els[i].focus();
  • return false;
  • }
  • break;
  • //test des champs de type select où plusieurs sélections sont possible
  • case "select-multiple":
  • var test = false;
  • for(var x=0; x < els[i].length; x++){
  • if(els[i][x].selected && els[i][x].value != '-1'&& trim(els[i][x].value) != ''){
  • test = true;
  • }
  • }
  • if(!test){
  • alert("vous devez sélectionner une option dans la liste multipe");
  • els[i].focus();
  • return false;
  • }
  • break;
  • } // fin du switch
  • } // fin du for
  • } // fin du if
  • if(test){
  • return false;
  • }
  • }
  • function isEmail(strSaisie) {
  • var verif = /^[^@]+@(([\w\-]+\.){1,4}[a-zA-Z]{2,4}|(([01]?\d?\d|2[0-4]\d|25[0-5])\.){3}([01]?\d?\d|2[0-4]\d|25[0-5]))$/
  • return ( verif.test(strSaisie) );
  • }
  • //fonction trouvé à l'adresse suivante
  • //http://anothergeekwebsite.com/fr/2007/03/trim-en-javascript
  • function trim(aString) {
  • var regExpBeginning = /^\s+/;
  • var regExpEnd = /\s+$/;
  • return aString.replace(regExpBeginning, "").replace(regExpEnd, "");
  • }
function checkForm(els){
    var els = els.elements; // éléments du formulaire
    var regEx =/^test-(.+)/; // expression régulière testant si le champs est à valider
      for ( var i = 0 ; i < els.length ; i++ ) { // on boucle sur les éléments du formulaire
        if(regEx.test(trim(els[i].name.toString()))){ // test si le champs est à valider
             switch(els[i].type){ //Chaque élément à son test personnalisé

             //test des champs de type text
                case "text":
                    if(trim(els[i].value).length <= 0){
                        alert("vous devez remplir le champs de text");
                        els[i].focus();
                        return false;
                    }else{ // test si c'est un champs contenant un email
                        regExEmail = /^test-email-(.+)/;
                        if(regExEmail.test(trim(els[i].name.toString()))){
                            if(!isEmail(els[i].value)){
                                alert("l'email saisie est invalide");
                                els[i].focus();
                                return false;
                            }
                        }
                    }
                 break;


              //test des champs de type textarea
                case "textarea":
                    if(trim(els[i].value).length <= 0){
                        alert("vous devez remplir le champs de text");
                        els[i].focus();
                        return false;
                    }
                 break;

              //test des champs de type file
                case "file":
                    if(trim(els[i].value).length <= 0){
                        alert("vous devez envoyer un fichier");
                        els[i].focus();
                        return false;
                    }else{
                        //test si l'extention est valide
	                        if( /^(.+)\.(pdf|jpg|gif|avi)/i.test(trim(els[i].value.toLowerCase())) == false){
                            alert("vous n'avez pas choisi le bon type de fichier");
                            els[i].focus();
                            return false;
                        }
                    }
                 break;


              //test des champs de type radio
                case "radio": // test pour les champs radio
                    var test = false;
                    var nom_champ = els[i].name; // si des champs radio se suivent et ne porte pas le même nom on les traites séparément
                    // on boucle sur les champs radio pour savoir si au moins un champs est sélectionné
                        while(els[i].type == "radio" && nom_champ == els[i].name){
                            if(els[i].checked){
                                test = true;
                            }
                            i++;
                        }
                        i--;
                    if(!test){
                        alert("vous devez sélectionner une option radio");
                        els[i].focus();
                        return false;
                    }
                 break;


            //test des champs de type checkbox
                case "checkbox":
                    if(!els[i].checked){
                        alert("vous devez sélectionner une option chekbox");
                        els[i].focus();
                        return false;
                    }
                 break;


            //test des champs de type select où une seul sélection est possible
                case "select-one":
                    var test = false;
                    for(var x=0; x < els[i].length; x++){
                        if(els[i][x].selected && els[i][x].value != '-1'&& trim(els[i][x].value) != ''){
                            test = true;
                        }
                    }
                    if(!test){
                        alert("vous devez sélectionner une option dans la liste déroulante");
                        els[i].focus();
                        return false;
                    }
                 break;


            //test des champs de type select où plusieurs sélections sont possible
                case "select-multiple":
                    var test = false;
                    for(var x=0; x < els[i].length; x++){
                        if(els[i][x].selected && els[i][x].value != '-1'&& trim(els[i][x].value) != ''){
                            test = true;
                        }
                    }
                    if(!test){
                        alert("vous devez sélectionner une option dans la liste multipe");
                        els[i].focus();
                        return false;
                    }
                 break;
             } // fin du switch
          } // fin du for
        } // fin du if
        if(test){
            return false;
        }
}


function isEmail(strSaisie) {
    var verif = /^[^@]+@(([\w\-]+\.){1,4}[a-zA-Z]{2,4}|(([01]?\d?\d|2[0-4]\d|25[0-5])\.){3}([01]?\d?\d|2[0-4]\d|25[0-5]))$/
    return ( verif.test(strSaisie) );
}

//fonction trouvé à l'adresse suivante
//http://anothergeekwebsite.com/fr/2007/03/trim-en-javascript
function trim(aString) {
    var regExpBeginning = /^\s+/;
    var regExpEnd       = /\s+$/;
    return aString.replace(regExpBeginning, "").replace(regExpEnd, "");
}

Historique

03 novembre 2006 12:07:09 :
mise à jour mineur
20 septembre 2007 15:21:00 :
Le code à été entièrement remanié
22 décembre 2008 08:57:38 :
Correction d'un bug due à une expression régulière valide une fois sur deux

Commentaires et avis

signaler à un administrateur
Commentaire de stef1589 le 06/10/2006 17:21:08

pas mal

signaler à un administrateur
Commentaire de younes371 le 06/10/2006 23:37:17

ça à l'air pas mal, je te met 5/10.
et je te demande si tu pe mettre un fichier .htm complet, avec des champs?, pour savoir ou tu fais appel à tes fonctions.

signaler à un administrateur
Commentaire de kiki2sirom le 09/10/2006 15:28:09

alors là je ne suis pas tout à fait d'accord sur le côté "pas mal" de ce code...

Dans la plupart des formulaires, il y a certains champs qui sont obligatoires, et d'autres non !! dans ce cas là ce code ne fonctionnera pas : un exemple de saisie de coordonnées, on ne va pas obliger une personne à saisir son n° de tél ou de portable ou autre chose, s'il veut il le fait...

J'aurai plus vu un truc du genre : tous les noms de champs obligatoires commencent par "check_" ou quelque chose du même genre...

ça deviendra plus "portable" comme code. on rajoute, on enlève facilement un champs de formulaire

kiki

signaler à un administrateur
Commentaire de Waldo2188 le 10/10/2006 13:02:42

Salut,
kiki2sirom je vais te rassurer!
Ce code se base sur l’élément "title" des balises "input". C'est à dire, si tu mets un élément Title dans ton input, tu rends ce champ obligatoire, dans le cas contraire ton champ est libre.
Si tu veux savoir pourquoi je me base sur l'élément Title, c'est pour les utiliser lors de l'affichage de l'alert et indiquer à l'utilisateur le champ qu'il a omis.

younes371 :
Je fais l'appel de la fonction lors de l'envoie du formulaire, donc ton entête de formulaire aura à peu près cette forme:
<form name="toto" action="xxxxx.php" method="post" onsubmit="return checkForm(this)" >
c'est le on submit qui fait l'appelle à la fonction, et on met un "return" devant, car si ton formulaire n'est pas complet la fonction renvoie faux.
Donc dans ce cas la le onsubmit est faux donc le formulaire n'est pas envoyé.

Si vous avez d'autre question, ne pas hésiter à les poser

signaler à un administrateur
Commentaire de garfield90 le 11/10/2006 15:28:19

Ton code a l'air propre, mais je trouve que tu fais une erreur dans l'utilisation de ta fonction.

C'est une aide à la vérification de formulaire (sympa pour l'internaute) mais la vérif tu es obligé de la faire avec un langage serveur (PHP, ASP, ...) donc tu te paluches 2 fois les tests.

Perso, je fais une fois le test en langage coté serveur et basta (l'internaute doit savoir lire et point barre).

En tout cas, c'est un bon exemple de la puissance de JS même si je ne m'en serai jamais servi comme ca

Par contre, je trouve que niveau ergonomie ton système n'est pas top, l'utilisateur va devoir corriger ces erreurs une par une alors que tu pourrais lui retourné un seul est unique message d'erreur ( les contenants toutes) et lui mettre le focus sur le premier

signaler à un administrateur
Commentaire de Waldo2188 le 16/10/2006 10:48:01

C'est clair que les messages d'alert c'est lourd!
Mais rien ne t'empèche de faire autrement pour avertir l'utilisateur.
D'ailleur suite à ton commentaire j'ai viré les alert pour mettre des "div" qui apparaissent en douceur à côté de chaque champs erronés (merci AJAX).
Cependant tu na pas tors quand tu dis qu'il va faloir se repalucher des tests du côté serveur, mais ce javascript t'évite déjà d'avoir des champs vides, et donc de devoir re-charger le formulaire en affichant les erreurs trouvé. Ca évite une perte de temps pour l'utilisateur.

Enfin sache que le taf d'un développeur c'est de facilité la vie des gens et de les accompagner dans leur actions donc "l'internaute doit savoir lire et point barre" ne s'applique pas ;)

signaler à un administrateur
Commentaire de garfield90 le 16/10/2006 12:17:59

Ce javascript permet d'avoir un message d'erreur générique ( champ a renseigner ) et en aucun cas une aide a l'utilisateur.

Tu ne fais pas de message personnalisé, donc si tu t'attends a un numéro de téléphone, et que l'utilisateur donne son email, ton javascript ne sortira pas d'erreur. Par contre le serveur ne devra pas valider car la donnée saisie n'est pas correcte

=> JS aucune erreur
=> PHP/ASP erreur
-----------------
utilisateur perdu

Je ne trouve pas ca forcement pratique pour l'utilisateur.

Enfin sache que le taf d'un développeur c'est de facilité la vie des gens et de les accompagner dans leur actions donc "l'internaute doit savoir lire et point barre" ne s'applique pas ;)

Je ne suis pas d'accord avec toi, un développeur ne doit pas accompagner l'utilisateur dans ces actions (il peut le faire en supplément, l'ergonomie est un autre boulot).
Le développeur se doit de faire un programme qui fonctionne dans TOUS les cas de figures

signaler à un administrateur
Commentaire de florian_x2 le 11/01/2007 16:51:59

Merci pour ce script qui marche super (mis à part qu'il manque un ' devant checkbox à la ligne 3).
Sinon c'est vrai que c'est un peu lour pour les utilisateurs lorsqu'il y a bcp de champs obligatoires, mais après tout les utilisateurs n'ont qu'à lire et remplir les champs comme il se doit.
J'ai qd même une petite question concernant les "select", comment faire pour obliger les gens à choisir une option autre que celle par défaut?
merci de votre aide  

signaler à un administrateur
Commentaire de Waldo2188 le 12/01/2007 11:51:53

Salut,
pour te répondre florian_x2 regarde du coté de la méthode onChange="".
Tu devrais avoir un truck du genre pour ton champs select.
<select name="unNom" id="unId" onchange="testValeurDefault(this)">
<option value="ValeurParDefaut">Valeur par default</option>
<option value="uneValeur_1">Valeur 1</option>
<option value="uneValeur_2">Valeur 2</option>
<option value="uneValeur_3">Valeur 3</option>
</select>

dans ton code javascript tu devrais avoir quelque chose comme ca.

function testValeurDefault(el){
//el corespond à ton objet sélect
if(el.value == 'ValeurParDefaut'){ // tu test si ton select est toujours à la valeur par defaut
  alert('Veuillez choisir une valeur');
  el.focus();
}
}

voila à peut près ce que tu devrais avoir.
Bon dev!

signaler à un administrateur
Commentaire de clam13 le 11/09/2007 21:47:11

Salut, encore merci pour ce script, pourrais-tu me donner un exemple de code à ajouter à ta fonction pour vérifier qu'une <option> est sélectionné dans un <select>.J'ai essayé ça mais marches pas!(je débute):

if(obj.elements[i].type == 'select' && obj.elements[i].options.selectedIndex.value == -1){
     alert("vous n'avez pas de sélection : " + obj.elements[i].title);

Merci d'avance

signaler à un administrateur
Commentaire de Waldo2188 le 11/09/2007 22:58:03

Salut,
ca pourais donner ce genre de chose.

// on teste si l'objet de formulaire est une liste déroulante, dans ce cas l'objet est de type "select-one"
if(obj.elements[i].type == 'select-one'){
    SelectEls = obj.elements[i];
    var nbSelectItem = SelectEls.length;
    var SelItemTest = false;
    for(SelItem=0; SelItem < nbSelectItem; SelItem++){
    // on teste chaque option de l'élément select
    // dans ton cas on test aussi si la valeur sélectionné est différente de -1
      if(SelectEls[SelItem].selected && SelectEls[SelItem].value != -1){
        SelItemTest = true;
        SelItem = nbSelectItem+1;
      }
    }
    if(SelItemTest){
      alert("c'est bon, une option est choisi");
    }else{
      alert("aucune option n'a été choisi");
    }
}

en espérant que ca t'aide un peu.
++

signaler à un administrateur
Commentaire de clam13 le 12/09/2007 13:07:53

MERCI++ pour ton aide, ça marche nickel !!! exactement ce que je voulais

signaler à un administrateur
Commentaire de clam13 le 12/09/2007 21:19:32

Salut, j'ai juste un petit problème avec ton script, avec une adresse email valide, il me dit qu'elle est invalide. J'ai pourtant bien ajouté title="email" comme dans le script.

Merci d'avance

signaler à un administrateur
Commentaire de webandyou le 16/09/2007 15:23:00

merci pour le code et les commentaires...
mais ceci n'est pas un code pour débutant! et j'en suis un. (ou alors il existe une catégorie encore plus bas niveau que débutant..Lol)
pensez à nous quand vous postez :-)

signaler à un administrateur
Commentaire de lechatfoin le 18/07/2008 11:37:21

Merci beaucoup j'ai gagné pas mal de temps !

Par contre il ne teste pas les champs de type 'password' et ça m'a assez vite manqué...
Bon c'est un détail il suffit d'ajouter un ' case "password" '.

signaler à un administrateur
Commentaire de webmcmaster le 17/12/2008 22:33:35

Très bonne base permettant de controler simplement presque tous les champs d'un formulaire... Sauf que, le formulaire ne peut pas être envoyé après le controle ?
En enlevant : onSubmit="return checkForm(this)", donc sans controle, mon formulaire fonctionne bien ? Dois y'avoir un problème de boucle, non ?
Si quelqu'un peu vérifier :)

signaler à un administrateur
Commentaire de Waldo2188 le 18/12/2008 10:01:07

Salut WEBMCMASTER,
ca fait un baille que je n'est pas utilisé cette fonction, regarde sur cette page :
http://mon-beulogue.com/tester-un-formulaire-en-javascript.html

Ca doit être la dernière version... :/

signaler à un administrateur
Commentaire de webmcmaster le 19/12/2008 18:11:12 10/10

Merci bien WALDO...
Helas, j'avais bien la dernière version...
Après tests, cela fonctionne correctement seulement si, les champs : text, textarea, checkbox, file et la fonction mail sont utilisés... par contre, ça merdouille si on utilise les champs : radio et select...
Oh, grand maître :) Aurais-tu la bonté de vérifier ton magnifique script afin qu'il remplisse entièrement sa tâche ?

NB : Même si quelques grammes de code indispose le script (sauf grosse bourde de ma part)... je note 10/10 car j'ai bien cherché sur le net et je n'ai pas trouvé de script aussi simple qui s'occupe aussi bien de tous les champs !

signaler à un administrateur
Commentaire de webmcmaster le 26/12/2008 15:27:00

Désolé, c'est encore me... pour 2 raisons :
1 - Maintenant, les champs radio et select sont bien contrôlés, mais si l'on utilise ces derniers, même individuellement, le formulaire ne peut pas être envoyé après contrôle... mais nul doute que Waldo va trouver la solution :) !
2 - Si l'on souhaite valider le formulaire à l'aide d'une action javascript : par exemple : "javascript:document.formulaire.submit()", comment peut-on intégrer la fonction "return checkForm(this)" afin d'envoyer le formulaire à partir de n'importe quel lien ?
Merci d'avance

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Problème de teste de formulaire [ par kaygee ] Salut,j'ai un petit problème avec mon formJ'ai dans une premier temps créer une fonction de teste d'email de confirmationfunction verif_conf_mail(){if Verification de champs [ par tib411 ] bonjour,Des petits problémes avec les verifications de formulaireVoila mon probléme :Pour l'instant j'arrive à verifier qu'un champ n'est pas videfunc création d'un formulaire sur site avec envoi résultat par email + tableau récapitulatif [ par fcpe ] Bonjour à tous, Je suis novice dans la création de site internet et je souhaiterais créer une page formulaire/enquete sur mon site. Je vous explique, Formulaire : choisir le destinataire du formulaire [ par shaoling ] Bonjour,J'aimerai que vous m'aidiez pour mon formulaire. Il se compose :- de 3 champs de texte (1 pour le nom, 1 pour l'adresse email de celui qui l'e Formulaire - Vérifier le nom de domaine ds l'email [ par 6_boulettes ] Salut à tous!Je souhaiterais faire un formulaire qui demande une adresse email avec 2 noms de domaines particuliers. Si le nom de domaine correspond, FORMULAIRE [ par ellenac ] Bonjour &#224; tous ,voila dans le script suivant (formulaire tout b&#234;te !) ,je comprends pas !!! ???je voudrais quand je clique sur envoyer qu'il Formulaire sans transmission par email [ par Dominike ] Bonjour à tous avec une mention particulière pour celui ou celle qui m'apportera son aide.Je suis juste un petit bidouilleur amateur et je me borne le Date system [ par lolla19_116 ] Bonjour tout le monde, mon probleme c que je veux faire une teste sur un champ de date, donc je veux quant je saisi une date et je clik sur le bouton formulaire avec cobo rechargeable [ par alexius ] Bonjour à tous, je souhaite réaliser un formulaire avec des options de vote que je souhaite placer dans des combobox.Le formulaire comporte une quaran Problème avec une RegExp [ par AgLS ] Bonjour, J'ai un petit problème avec ma première RegExp en JavaScript. Cette RegExp doit vérifier les critères ci-dessou dans un email: -Commence par


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,452 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.