Table des Matières

Objectif

L'objectif de ce code est de mettre en place un contrôle sur les formulaires HTML grâce à JQuery sans avoir à envoyer le formulaire.

Code

Code HTML

L'exemple sera un simple formulaire avec 3 champs obligatoires dont un champ comportant une adresse mail.

 <div id="formulaire">
        <div id="error_formular">
        Un ou plusieurs champs du formulaire ne sont pas remplis.<br/>Merci de corriger ce(s) erreur(s) puis de valider &agrave; nouveau votre formulaire.
        </div>
        <form id="testform" method="post">
            <hr/>
            <label for="name" id="l_name" class="label_oblig">Nom</label><br/><input type="text" id="name" name="name" class="donnees" rel="obligatoire" value="">
            <hr/>
            <label for="email" id="l_email" class="label_oblig">Adresse Email</label><br/><input type="text" id="email" name="email" class="donnees" rel="obligatoire" rev="email" value=""/>
            <hr/>
            <label for="age" id="l_age">Age</label><br/><input type="text" id="age" name="age" class="donnees" value=""/>
            <hr/>
            <label for="description" id="l_description" class="label_oblig">Description</label><br/><textarea id="description" name="description" class="donnees" rel="obligatoire"></textarea>
            <hr/>
            <span class="footer">Les champs marqu&eacute;s d'une &eacute;toile (<img src="http://www.kns7.org/images/required.png"/>) sont obligatoires.</span>
            <br/>
        </form>
        <button OnClick="if(check_formular()){testform.submit();}else{return false;}">Envoyer le Formulaire</button>
    </div>

Code Javascript

Le code Javascript, utilisant la librairie JQuery

$(document).ready(function(){
    $('input.donnees').blur(function() {
        var email =    /^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/;
        var number = /^[-]?\d*\.?\d*$/; // Nombre
        var length5 = /\b.{5}\b/; // Longueur de 5 caractères
        if($(this).attr("rel") == 'obligatoire')
        {
            if($(this).attr("rev") == 'email' && $(this).val().match(email))
            {
                trigger_ok = true;
                trigger_tested = false;
            }
            if($(this).attr("rev") == 'number' && $(this).val().match(number))
            {
                trigger_ok = true;
                trigger_tested = false;
            }
            if($(this).attr("rev") == 'length5' && $(this).val().match(length5))
            {
                trigger_ok = true;
                trigger_tested = false;
            }
            if($(this).val() != '' && trigger_tested)
            {
                trigger_ok = true;
            }
            if(trigger_ok)
            {
                $(this).removeClass("field_error");
                $("#l_"+$(this).attr("name")).removeClass("label_error");
            }
        }
    });
    $('textarea.donnees').blur(function() {
        var email =    /^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/; //Adresses Mail
        var number = /^[-]?\d*\.?\d*$/; // Nombre
        var length5 = /\b.{5}\b/; // Longueur de 5 caractères
        var trigger_ok = false;
        var trigger_tested = true;
        if($(this).attr("rel") == 'obligatoire')
        {
            if($(this).attr("rev") == 'email' && $(this).val().match(email))
            {
                trigger_ok = true;
                trigger_tested = false;
            }
            if($(this).attr("rev") == 'number' && $(this).val().match(number))
            {
                trigger_ok = true;
                trigger_tested = false;
            }
            if($(this).attr("rev") == 'length5' && $(this).val().match(length5))
            {
                trigger_ok = true;
                trigger_tested = false;
            }
            if($(this).val() != '' && trigger_tested)
            {
                trigger_ok = true;
            }
            if(trigger_ok)
            {
                $(this).removeClass("field_error");
                $("#l_"+$(this).attr("name")).removeClass("label_error");
            }
        }
    });
});
function alerte(id)
{
    $("#"+id).addClass("field_error");
    $("#l_"+id).addClass("label_error");
}
function check_formular()
{
    var email =    /^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/; //Adresses Mail
    var number = /^[-]?\d*\.?\d*$/; // Nombre
    var length5 = /\b.{5}\b/; // Longueur de 5 caractères
    var trigger = true;
    $(":input").each(function()
    {
        var valeur = $(this).val();
        var type = $(this).attr("rel");
        var rev = $(this).attr("rev");
        var nom = $(this).attr("name");
        if(type == "obligatoire")
        {
            if(valeur == '')
            {
                alerte(nom);
                trigger = false;
            }
            if(!valeur.match(email) && rev == 'email')
            {
                alerte(nom);
                trigger = false;
            }
            if(!valeur.match(number) && rev == 'number')
            {
                alerte(nom);
                trigger = false;
            }
            if(!valeur.match(length5) && rev == 'length5')
            {
                alerte(nom);
                trigger = false;
            }
        }
    });
    if(trigger)
    {
        $("#error_formular").slideUp("fast");
    }else{
        $("#error_formular").slideDown("fast");
    }
    return trigger;
}

CSS

Et enfin un peu de CSS pour rendre le tout plus agréable.

body {
    margin: 10px auto;
    width: 500px;
    padding: 20;
    border: 1px solid #808080;
}
.donnees {
    border: 1px solid #b2b2b2;
    background: #e6e6e6;
}
label {
    color: #808080;
}
.label_oblig {
    font-weight: bold;
    padding-right: 20px;
    background: url('http://www.kns7.org/images/required.png') top right no-repeat;
}
/* Error System */
.field_error {
    border: 1px solid #a50021;
}
.label_error {
    color: #a50021;
    font-weight: bold;
}
#error_formular {
    display: none;
    margin: 10px 20px;
    padding: 10px;
    vertical-align: middle;
    text-align: center;
    border:1px solid #CC0000;
    background-color: #F7CBCA;
    color:#CC0000;
}
.footer {
    font-size: 11px;
}

 

Explications

A la validation du formulaire, la fonction check_formular() est appelée. Elle va vérifier tous les éléments input ou textarea dont l'attribut rel est obligatoire.

Si les éléments n'ont pas d'attibuts rev de défini, la fonction va simplement vérifier qu'ils ne sont pas vides. Si un attribut rev est défini, cela correspond à un test spécifique. Dans cet exemple, j'ai défini trois règles spécifiques: email, number, length5

  • email spécifie que le champ doit être une adresse email à la syntaxe valide
  • number spécifie que le champ doit être exclusivement numérique
  • length5 spécifie que la longueur de la valeur doit être de 5 caractères

Si les conditions ne sont pas remplies, le formulaire n'est pas envoyé, un message d'erreur apparaît et on ajoute une classe aux élements et à leur label (en l'occurence, dans cet exemple, ils seront affichés en rouge).

 

Exemple

Un exemple peut être consulté ici. (Les codes Javascript et CSS sont directement inclus dans le HTML):

Liste des Commentaires
le 10 Feb 2010 à 16:07:25
lmklmllllllllllllllll
powerpro
le 26 Feb 2010 à 21:47:54
Excellent boulot, merci pour ce tuto tu n'aurais pas un exemple avec l'envoi du formulaire et une fois validé retourne par courriel tout les champs, je débute en jQuery et j'essai d'apprendre le principe.

merci!
Nico
le 04 Mar 2010 à 21:23:47
Ce script ne traite que le contrôle du formulaire. Ce que tu demandes implique une partie de code serveur. En quel langage veux tu gérer le traitement après l'envoi du formulaire (envoi du mail par exemple) ?

Voici un bout de code en PHP qui te permettra de gérer l'envoi du formulaire en mail.
if(isset($_POST['name']))
{
$message = "Informations entrées:\n";
$message .= "Nom: ".$_POST['name']."\n";
$message .= "Email: ".$_POST['email']."\n";
$message .= "Age: ".$_POST['age']."\n";
$message .= "Description: ".$_POST['description']."\n";
mail($_POST['email'],"Infos Formulaire",$message);
}
?>

Ce code est à placer avant le code HTML.
Lors de l'envoi du formulaire, le code PHP est traité (car la variable $_POST['name'], contenant la valeur de l'input "name" est déclarée).
Il envoie un simple mail à l'adresse email donnée en indiquant toutes les informations.

Pour en savoir plus, voici quelques éléments de recherche.

http://www.siteduzero.com/tutoriel-3-14543-transmettre-des-donnees-avec-les-formulaires.html

Bon courage
le 01 Apr 2010 à 19:31:53
J'essai de l'adapter à un formulaire GOOGLE pour l'instant c'est pas trop mal le seul hic c'est que le formulaire fait plus d'une page et du coup le message d'erreur ne s'affiche pas il me faut donc trouver un autre système que $("#error_formular").slideDown("fast");

Encore merci pour toutes ces explications qui m'ont permises de faire un grand pas en avant
Laissez votre commentaire:
Un ou plusieurs champs ci-dessous ne sont pas remplis correctement.
Les champs obligatoires sont indiqués par une étoile rouge









En aucun cas, votre adresse email ne sera diffusée.
Elle ne sera utilisé que pour l'avatar (service de gravatar.com)
Les champs marqués d'une sont obligatoires.





© 2003 - 2010 kns7.org | Site réalisé et hébergé par KNet Solutions | Plan du site | Contact

En Deuil contre HADOPI:
kns7.org est en deuil contre les obscurantistes industriels du divertissement et leurs lois liberticides