Commentçamarche.net
CodeS-SourceS
Rechercher un code, un tuto, une réponse

Tester un formulaire en javascript

1/5 (22 avis)

Snippet vu 44 015 fois - Téléchargée 11 fois

Contenu du snippet

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 / Exemple :


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, "");
}

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.