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
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
le 02 Aug 2010 à 12:29:38
@francis:
Tu peux simplement placer ta DIV (#error_formular) en position fixe en haut de page par exemple.

#error_formular {
position: fixed;
top: 0;
left: 0;
width: 100%;
z-index: 90;
}

Ainsi le message ne sera plus sensible au défilement vertical et sera toujours à la même position dans le navigateur.
le 31 Aug 2011 à 01:24:08
Every one knows that life is not very cheap, however people need money for different stuff and not every person earns big sums money. So to get fast credit loans or consolidation loans will be a right solution.
le 15 Sep 2011 à 07:36:02
buy deine nachricht site tramadol 337117 levitra 701689 car insurance quotes yvd viagra 737717
le 15 Mar 2012 à 16:50:21
bpydfmg bactrim online YmVQJi order purim =-] cheap aciclovir 9704 hytrin online dBaee yasmin wOZlh
le 15 Mar 2012 à 16:53:36
jauuybvd cialis BDQvN viagra hGlUo viagra %-[[[ cialis 8133 buy viagra gXRsrs cialis 6697
le 16 Mar 2012 à 10:19:29
gdxcsh ジェネリック・シアリス WCklV propecia >:-[ generic viagra >:]] viagra Qdefd viagra %-[[[ cheap cialis >:]]
le 28 Mar 2012 à 21:14:34
orzxnhru cialis SyJBr viagra %-[[[ cialis >:-[ generic cialis rjBIKX cheap viagra 7216 viagra =-]
le 30 Mar 2012 à 17:53:26
dhbklq payday loans uk 4282 short term payday loans lWncgv cheape cigarettes 0723
le 05 Apr 2012 à 15:56:56
kafaoro generic cialis 7784 cialis KVaXZ viagra 9766 cialis hTOWs viagra JUBbqo generic viagra 2585
le 06 Apr 2012 à 20:24:18
yhbgikp uk payday loans %-[[[ cheapest cigarettes guArH Payday Loans 2091 payday loans 8]]]
le 24 Apr 2012 à 21:00:08
Some specialists say that credit loans help a lot of people to live their own way, because they can feel free to buy needed things. Furthermore, different banks give auto loan for different classes of people.
le 19 May 2012 à 00:53:01
wxokvzhi payday loans 4366 payday loans 9783 short term loan 2152 cheapest car insurance 8]]]
le 21 May 2012 à 21:13:14
ctebpp payday loans >:-[ payday loan uindx cash advance online GAGsd cheap car insurance wsunRa
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 - 2012 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