Designed by Derf !
64 en ligne   Boutique | Sites | Bar | Forum | PhpBB | Actu | Glossaire | Codes | Tips | Liens | Livres | Lettre  


 Recherche

 NewsLetter






   

[JS] Masques de saisie pour formulaires ! (1/4)

ou comment faciliter la vie des internautes





iubito
N'as-tu jamais rêvé de faire des masques de saisie sur des zones de texte, comme dans VB et Delphi ?
Voici un script qui rendra les sites plus "pro".
Au menu :
- saisie de dates
- saisie de nombres et symboles monétaires
- saisie de chaînes de caractères


Principe - Ce qu'il faut faire - Aller un peu plus loin -
Format "date"
- Format "number" - Format "string" - Télécharger !


Je ne suis pas l'auteur de ce script génialissime, mais je cherchais ça pour le boulot et je suis comblé, donc je partage le secret :-)

Et surtout je l'ai amélioré !! ;o)

Tout d'abord, en remerciement à l'auteur, voici sa page web : Pengoworks
(la page montre 3 exemples)

Télécharge ce fichier zip qui contient le javascript amélioré et des exemples ;-)


Principe de base (très simple)

Imagines tu as un site web avec des formulaires, et tu veux que les gens saisissent des chiffres, des dates, un numéro de téléphone...
Il faut contrôler rigoureusement la saisie pour éviter qu'un petit malin écrive des lettres !
Ce script n'est pas parfait, ne passe pas forcément sur tous les navigateurs, donc ça ne dispense pas d'un contrôle supplémentaire, mais ça évite certaines fautes de frappe... c'est déjà ça ;-)

Il y a 3 types de formatage possibles :

1) les dates 2) les nombres 3) les chaînes de caractères
jj/mm/aaaa :
yyyy-mm-dd :
Nombre entier :
Prix en euros :
Pourcentage :
N° téléphone :
N° Sécurité Sociale :


Ce qu'il faut faire

  1. Première chose, inclure le script ! héhé ;o)
    Dans la section <head></head>, insère la ligne :
    <script language="JavaScript1.2" src="masks.js"></script>
  2. Repère les champs et les formats que tu veux appliquer. Par exemple dans le formulaire :
    <form name="monform" action=....>
    <input type="text" name="datedebut"/>
    <input type="text" name="datefin"/>
    <input type="text" name="montant"/>
    ...
    </form>

    Il est important que le formulaire <form> et les champs <input> aient leur attribut name renseigné.

    Dans cet exemple, nous allons choisir le format de date à la française (jj/mm/aaaa) et le montant en euro - le symbole € se met automatiquement c'est magique ! -.
  3. Donc les 2 masques que nous allons utiliser pour ce formulaire sont :
    • date : jj/mm/aaaa
    • number : €#_###.00 - 2 chiffres après la virgule, le point . pour séparateur de décimales, un espace représenté par un souligné _ pour séparer les milliers, on peut mettre autant de chiffres qu'on veut avant le point ils seront groupés par 3, par contre il y aura toujours 2 décimales.
    On peut utiliser un même masque pour plusieurs champs.
  4. Ensuite on crée la fonction javascript qui instancie les masques, et les affecte à des champs.
    <script language="JavaScript1.2">
    // Mask JavaScript API (v0.3) - dswitzer [chez] pengoworks [point] com - iubito [chez] asp-php [point] net
    function init()
    {
       // Création du masque date jj/mm/aaaa
       oDateMask = new Mask("jj/mm/aaaa", "date");
       // Création du masque montant en euro
       oEuroMask = new Mask("€#_###.00", "number");
       // Associer le oDateMask aux 2 champs
       oDateMask.attach(document.monform.datedebut);
       oDateMask.attach(document.monform.datefin);
       // Associer le oEuroMask au champ
       oEuroMask.attach(document.monform.montant);
    }
    </script>

  5. Enfin, il ne te reste plus qu'à lancer la fonction au chargement de la page
    <body onload="init();">

Et hop! voilà le travail ;-)


Pour aller un peu plus loin...

Champs ayant le même nom

Parfois, il y a des formulaires avec des champs qui portent le même attribut name... le langage serveur (ASP, JSP ou PHP) récupère ça sous la forme de tableau. JavaScript aussi !

Pour "attacher" un masque à une série des champs portant le même nom, la fonction init() doit être du style :
function init()
{
   oEuroMask = new Mask("€#_###.00", "number");
   // Attache à chaque champ appelé 'champs'
   for (i=0; i<document.monform.champs.length; i++)
   {
      oEuroMask.attach(document.monform.champs[i]);
   }
}

Reformatage

Si les zones sont remplies

  • par une base de données au chargement de la page
  • par un javascript (résultat d'un calcul, calendrier qui insère une date...)
on peut reformater l'affichage comme ceci :
// Reformatage
if (document.monform.monchamp.value != '')
   document.monform.monchamp.value = oEuroMask.format(document.monform.monchamp.value);

Tu veux utiliser ta propre fonction de vérification (sur le onblur) ?

MaskEdit fait certaines vérifications au cours de la saisie, notamment sur les nombres. Il est conseillé pour les dates de mettre une vérification supplémentaire à la fin, mais tu peux sans doute avoir tes propres besoins (nombre entre x et y...).

Concrètement, le javascript met en place 3 événements (à la ligne 17) :
Mask.prototype.attach = function (o)
{
   if ((o.readonly == null) || (o.readonly == false))
   {
      o.onkeydown = new Function("return " + this.ref + ".isAllowKeyPress(event, this)");
      o.onkeyup = new Function("return " + this.ref + ".getKeyPress(event, this)");
      o.onblur = new Function("this.value = " + this.ref + ".format(this.value)");
   }
}
Si le champ n'est pas en lecture seule (readonly), alors crée les fonctions onkeydown, onkeyup et onblur.

Pour utiliser une fonction perso, il faut mettre en commentaire la ligne o.oblur, et pour faire bien les choses, dans la fonction il faut faire un reformatage (voir le paragraphe juste au-dessus)

Gestion des erreurs

Dans les démos qui suivent, j'ai mis un textarea (nommé document.frmExample.erreur) qui affiche les messages d'erreur.

Dans le fichier masks.js, à la ligne 87, il y a la fonction Mask.prototype.throwError = function (c, e, v).
J'y ai mis quelques exemples d'affichage, de stockage du message d'erreur.
//   alert(e);
//   une_variable = e;
//   document.formulaire.inputhidden.value = e;

Le alert() est a éviter parce qu'il averti "trop" souvent et surtout fait perdre le focus au champ de saisie.


Principe - Ce qu'il faut faire - Aller un peu plus loin -
Format "date"
- Format "number" - Format "string" - Télécharger !



Pour pouvoir écrire dans ce forum, identifiez-vous !

 Lire  26/11/08 11:11 de mverel
bonjour, j'ai utilisé votre script sur les masques p...
  • 26/11/08 12:11 de DB77 On ne voit plus souvent iubito par ici :( ...
  •   v1.3p © ASP-PHP.net 2002  

    iubito le 26/08/2004 (146 017 hits)
    Didier Testez gratuitement la plateforme web de Windows Server 2008 !
    Gagnez un voyage aux Etats-Unis pour la MS Project Conference !
    Au fil des news  
    Adobe - Adobe annonce MAX 2009 !
    [MAJ] Dreamweaver MX + Php + MySql - Les formulaires - partie 3
    Mise à jour du code, par DB 77, affichage du code erreur, dans la page erreur.php, traduction des ...
    PHP - News avec photo - Système de gestion - affichage
    Gestion - Administration - Affichage d'une "News", "Actualité", "Info", ... avec : - mise en forme ...
    Dreamweaver Php Mysql - Région répétée imbriquée
    Je rebondis, sur un post du forum, pour vous montrer comment obtenir grâce à l'extension Simulated ...
    Gérer les bases de contenu SharePoint - Gérer la croissance du volume des données
    Dans le cadre de la gestion quotidienne de ferme SharePoint, il existe une partie qu'il faut ...
    PHP - Le Coach PHP sur Visual Studio
    .NET - Ecrire une application .NET utilisant MySQL
    PHP - Utilisation de PHP dans le monde Microsoft
    Magazines - Le n° 119 de Programmez est disponible
    Adobe - Adobe annonce Photoshop Marketplace
    [MAJ] Tutoriel AJAX simple - En avant vers le WEB2.0
    Mis à jour le 20/04/2009
    Captcha «maison» sans extension - Et en plus, c'est gratuit ;)
    Un ami m'a demandé de l'aide ce matin pour insérer un captcha dans un formulaire pour son site ...
    Dreamweaver CS4 - Photoshop CS4 - Alliance parfaite pour la gestion des images
    Pour changer un peu des pages de code, je vous propose de voir ensemble, la fonctionnalité très ...
    JavaScript - Calcul automatique d'une facture
    Amélioration du Search MOSS: Manipulation XSL - Utilisation du XSL dans l'affichage des résultats
    Parmi tous les articles sur l'amélioration du moteur de recherche de Microsoft Office SharePoint ...
    Outils - Editeur d'icônes IcoFX
    Magazines - Le n°118 de Programmez est disponible
    JavaScript - Imprimer une autre page que celle en cours
    CSS - div pour imiter frame (Bandeau/Menu FIXES)
    [MAJ] [PHP] Un calendrier très complet -
    ajout des événements au calendrier
    PowerShell - Winforms pour l'aide des commandes GET PowerShell
    Adobe - Adobe Photoshop Lightroom 2 est offert ....
    Amélioration du Search MOSS: synonyme et Best Bet - La gestion des synonymes dans MOSS Search
    Le moteur de recherche de MOSS permet la configuration d'une liste de synonymes. Nous verrons donc ...
    AJAX - récup champs formulaires pour POST en AJAX
    PowerShell - Un windows Forms pour SharePoint en PowerShell
    Sondage associatif (compatibilité) - Qui va bien avec qui ?
    Cette fois, c'est un petit sondage que je vous propose. Il pourra bien sûr être adaptée à vos ...
    ASP - Hashage MD5 (cryptage irréversible)
    Adobe - 80% de réduction sur les versions Adobe Creative
    CSharp - Interroger un serveur Whois
    CSharp - Equivalent de la fonction PHP htmlentities()
    CSharp - Somme de contrôle CRC32
    Magazines - Le n°117 de Programmez est disponible
    Hebergement - Hébergement ASP et ASP.Net
    MOSS - Mon Profil - Personnalisation des profils utilisateurs de MOSS
    La gestion des profils utilisateurs de SharePoint fait partie des fonctionnalités de base de ...
    Dreamweaver CS3 + Php + Mysql - Le Jeu d'Enregistrements - Les fondamentaux Part-3
    La 3ème partie des fondamentaux, traitera essentiellement du jeu d'enregistrements ou Recordset. ...
    Mon mini-site @ Home - avec Windows, Free, Wamp & DynDNS
    Envie d'héberger votre petit site chez vous, sur votre ordinateur ? de partager des fichiers avec ...
    Magazines - Le n°116 de Programmez est disponible
    Recevoir ses identifiants par mél - Bien pratique pour les petites têtes
    Encore une question posée sur le forum et zou... Le problème est simple : On a oublié ses ...
    ASP.NET - code pour le bouton enregistrer
    Microsoft - Grand jeu-concours MSDN : l'indice d'ASP-PHP.net !
    Tutorial : HTML | Scripting | ASP-PHP | ASP.net | SQL Server | XML
    Sharepoint | XAML | Pocket | Dreamweaver | VML | Divers
      Scripts : Scripting | ASP-PHP | ASP.net | Divers
      Boutique | Annuaire | Bannières | Météo | Tribune | Partenariats
    v3b © Didier 2003   
     

    Corpo Sciences de Reims Partitions gratuites Carte, météo, annonces
     DotNet Project ASP-magazine Groupes Utilisateurs Microsoft El Roubio CodePPC MVP Wygwam Codes Sources TechNet The Inquirer FR