Les formulaires - Astuces
Transcription
Les formulaires - Astuces
Les formulaires - Astuces Cette partie montre de nombreuses astuces pour rendre un formulaire dynamique et attractif, en réaction aux événements générés par l'utilisateur. Il est nécessaire de bien connaître le principe des formulaires HTML pour tirer partie de ces astuces. Au sommaire : 1 - Donner le focus à un élément 2 - Changer le libellé d'un bouton 3 - Ne permettre qu'un seul clic sur un bouton 4 - Valider un formulaire par JavaScript 5 - Vider un champ à la prise de focus 6 - Détecter la touche [Entrée] sur un formulaire 7 - Ajouter, insérer et supprimer des lignes dans une liste SELECT 8 - Bascule entre deux listes SELECT 9 - Empêcher la saisie dans un champ 10 - Faire clignoter un bouton 1 - Donner le focus (curseur) à un élément de formulaire Le premier champ texte a le focus au chargement de la page. Cliquez sur les boutons pour donner le focus aux autres éléments. La prise de focus est possible pour tous les types d'objets. Ceci est la ligne n° 2 Le script : <FORM name="form1"> <INPUT type="texte" name="champ1"> <INPUT type="button" value="<- Donne le focus" onClick="this.form.champ1.focus()"> <SELECT name="champ2" > <OPTION>Ceci est la ligne n° 1</OPTION> <OPTION>Ceci est la ligne n° 2</OPTION> </SELECT> <INPUT type="button" value="<- Donne le focus" onClick="this.form.champ2.focus()"> <TEXTAREA rows="2" cols="15" name="champ3"> <INPUT type="button" value="<- Donne le focus" onClick="this.form.champ3.focus()"> </FORM> Pour donner le focus à un champ de formulaire à l'ouverture de la page, il faut ajouter cette ligne dans la balise BODY : onLoad="document.forms['nomduform'].elements['nomchamp'].focus()" 2 - Changer le libellé d'un bouton Cliquez le bouton pour changer son libellé. Le script : <FORM name="form2"> <INPUT type="button" name="bouton" value='Cliquez-moi !' onClick="this.value='Touché !'"> </FORM> 3 - Ne permettre qu'un seul clic sur un bouton Accepte le premier clic sur le bouton et empêche les suivants. Utile pour éviter de recevoir 3 fois le même message quand un visiteur s'excite sur le bouton "Envoyer" ! Le script : Dans l'entête de la page <SCRIPT language="javascript"> var nbclic=0 // Initialisation à 0 du nombre de clic function CompteClic(formulaire) { // Fonction appelée par le bouton nbclic++; // nbclic+1 if (nbclic>1) { // Plus de 1 clic alert("Vous avez déjà cliqué ce bouton.\nLe formulaire est en cours de traitement... Patience"); } else { // 1 seul clic alert("Premier Clic."); } } </SCRIPT> Dans le corps <FORM name="form3"> <INPUT type="button" name="bouton" value="Cliquez-moi aussi !" onClick="CompteClic(this.form)"> </FORM> 4 - Valider un formulaire par JavaScript Il est souvent utile de vérifier la saisie d'un formulaire avant de le valider. L'idéal est de créer un bouton (de type "button" et pas "submit") qui appelle une fonction javascript qui contrôle la saisie et soumet ou non le formulaire. Voyons un exemple simple de test de saisie d'un email. Saisissez une adresse mail valide (du type [email protected]) Le script : Dans l'entête de la page <SCRIPT language="javascript"> function ValiderMail(formulaire) { if (formulaire.mail.value.indexOf("@",0)<0) {alert("Adresse mail saisie invalide.\nLe formulaire ne sera pas validé.")} else { alert("Formulaire validé.\nPour valider un formulaire : formulaire.submit()"); // Pour valider le formulaire en javascript : // formulaire.submit() } } </SCRIPT> Dans le corps de la page <FORM name="form4" action=""> Saisissez une adresse mail valide (du type [email protected]) ;<INPUT type="texte" name="mail"> <INPUT type="button" name="bouton" value="Valider" onClick="ValiderMail(this.form)"> </FORM> Sous netscape, l’utilisation de onclick sur un bouton peut poser des problèmes. Aussi vous pouvez aussi utiliser l’action onsubmit dans la balise du formulaire et retourner la valeur true ou false selon le résultat du test de votre fonction pour poster ou non votre formulaire (voir exemple rubrique 6). 5 - Vider un champ à la prise de focus Par exemple, un champ de saisie de login avec à l'origine "Votre login". Si vous cliquez sur le champ, "Votre login" disparaît. Le script : <FORM name="form5"> <INPUT type="texte" name="login" value='Votre login' onFocus="if (this.value=='Votre login') {this.value=''}"> </FORM> 6 - Détecter la touche [Entrée] sur un formulaire Utile dans les formulaires de recherche, où la plupart des utilisateurs tapent [Entrée] pour valider la recherche, sans cliquer sur le bouton "Rechercher". Entrez un mot : L'appui sur [Entrée] déclenche la soumission du formulaire qu'il est possible de détecter avec l'événement onSubmit. Ceci rejoint la précédente remarque de la rubrique 4. La balise FORM peut donc s'écrire : <FORM name="formulaire" onSubmit="maFonction()"> 7 - Ajouter, insérer et supprimer des lignes dans une liste Ce script permet d'ajouter dynamiquement des éléments dans une liste, sans rechargement de la page (nécessite des versions 4 et + de Netscape ou Internet Explorer). Le script : <HTML> <HEAD> <TITLE>Liste</TITLE> <SCRIPT LANGUAGE="JavaScript"> function Ajouter(form) { var o=new Option(form.libelle.value,form.valeur.value); form.liste.options[form.liste.options.length]=o; } function Inserer(form) { var o=new Option(form.libelle.value,form.valeur.value); if(form.liste.options.selectedIndex>=0) { form.liste.options.length++; for (var i=form.liste.options.length-1;i>form.liste.options.selectedIndex;i--) { var p=new Option(form.liste.options[i-1].text,form.liste.options[i-1].value); form.liste.options[i]=p; } form.liste.options[form.liste.options.selectedIndex]=o; } else { alert("Insertion impossible. Sélectionnez une ligne"); } } function Supprimer(list) { if (list.options.selectedIndex>=0) { list.options[list.options.selectedIndex]=null; } else { alert("Suppression impossible : aucune ligne sélectionnée"); } } function SupprimerTout(list) { list.options.length=0; } </SCRIPT> </HEAD> <BODY bgcolor="#FFFFFF"> <FONT FACE="Arial" SIZE='-1' COLOR="#000099"> <CENTER><BIG><B>Ajouter, insérer et supprimer une ligne dans une liste</B></BIG></CENTER> <BR> <FORM name="formulaire"> Ce script permet d'ajouter dynamiquement des éléments dans une liste, sans rechargement de la page (nécessite des versions 4 et + de Netscape ou Internet Explorer).<BR> Entrez le libellé et la valeur dans les champs ci-dessous, cliquez sur Ajouter ou Insérer.<BR> Libellé : <INPUT type="text" name="libelle" size=15 value="texte"> - Valeur : <INPUT type="text" name="valeur" size=15 value="texte"> <INPUT type="button" Value="Ajouter" onClick="Ajouter(this.form)"> <INPUT type="button" Value="Insérer" onClick="Inserer(this.form)"> <BR><BR> Sélectionnez une ligne de la liste pour voir le détail <SELECT align=top name="liste" size=3 onChange="alert('Libellé : '+this.options[this.selectedIndex].text+'\nValeur : '+this.options[this.selectedIndex].value)"> <OPTION value="Initiale">Ligne initiale</OPTION> </SELECT><BR><BR> <INPUT type="button" value="Supprimer la sélection" onClick="Supprimer(this.form.liste)"> <INPUT type="button" value="Supprimer tout" onClick="SupprimerTout(this.form.liste)"> <BR><BR> Le bouton Ajouter ajoute à la fin de la liste la ligne.<BR> Le bouton Insérer insère la nouvelle ligne avant la ligne sélectionnée.<BR> Le bouton Supprimer la sélection supprime la ligne sélectionnée dans la liste.<BR> Le bouton Supprimer tout supprime toutes les lignes.<BR> </FORM> <BR> </FONT></BODY></HTML> 8 - Bascule entre deux listes Ce script est une extension du n°7 (nécessite des versions 4 et + de Netscape ou Internet Explorer). Imaginons que vous deviez choisir des activités parmi une liste proposée : Activités proposées Plongée Jet-Ski Tir à l'arc Pétanque Bronzette Activités retenues Planche à voile <HTML> <HEAD> <TITLE>Bascule</TITLE> <SCRIPT LANGUAGE="JavaScript"> function Deplacer(l1,l2) { if (l1.options.selectedIndex>=0) { o=new Option(l1.options[l1.options.selectedIndex].text,l1.options[l1.options.selectedIndex].value); l2.options[l2.options.length]=o; l1.options[l1.options.selectedIndex]=null; }else{ alert("Aucune activité sélectionnée"); } } </SCRIPT> </HEAD> <BODY bgcolor="#FFFFFF"> <FONT FACE="Arial" SIZE='-1' COLOR="#000099"> <CENTER><BIG><B>Basculer des éléments d'une liste à l'autre</B></BIG></CENTER> <BR> Nécessite des versions 4 et + de Netscape ou Internet Explorer.<BR> Imaginons que vous deviez choisir des activités parmi une liste proposée :<BR><BR> <FORM name="formulaire"> <TABLE><TR> <TD align="center"><B><FONT size="2">Activités proposées</FONT></B><BR> <SELECT align=top name="liste1" size=6 style="width:120px"> <OPTION value="Planche">Planche à voile</OPTION> <OPTION value="Plongée">Plongée</OPTION> <OPTION value="Jet-Ski">Jet-Ski</OPTION> <OPTION value="Tir à l'arc">Tir à l'arc</OPTION> <OPTION value="Pétanque">Pétanque</OPTION> <OPTION value="Bronzette">Bronzette</OPTION> </SELECT> </TD> <TD align="center"> <INPUT type="button" value="Ajouter >>>" onClick="Deplacer(this.form.liste1,this.form.liste2)"> <BR><BR> <INPUT type="button" value="<<< Enlever" onClick="Deplacer(this.form.liste2,this.form.liste1)"> </TD> <TD align="center"><FONT size="2"><B>Activités retenues</B></FONT><BR> <SELECT align=top name="liste2" size=6 style="width:120px"> <OPTION value="10">----------------------</OPTION> </SELECT> </TD> </TR></TABLE> <SCRIPT language="javascript"> // Astuce pour Netscape qui ne supporte pas style="width:100" // Donc : création d'une ligne pour initialiser la largeur puis suppression par ce javascript document.formulaire.liste2.options.length=0; </SCRIPT> </FORM> <BR> </FONT></BODY></HTML> 9 - Empêcher la saisie dans un champ Dès que la curseur souris arrive sur ce champ, il est enlevé. Cela rend impossible la saisie ou la modification de son contenu. Non modifiable La saisie est L'astuce est d'utiliser l'événement onFocus qui détecte l'arrivée du curseur dans le champ. Voici la ligne décrivant la zone : <INPUT type="text" value="Non modifiable" name="champ" onFocus="this.blur()"> La méthode focus() appliquée au champ retire le curseur. Avec cette ligne, il est possible de rediriger le curseur vers un autre champ du formulaire : <INPUT type="text" value="Non modifiable" name="champ" onFocus="this.form.champ2.focus()"> La méthode focus() appliquée à champ2 active le curseur. 10 - Faire clignoter un bouton Pour attirer l'attention, il est possible de faire clignoter le texte d'un bouton. Ce script permet de paramétrer le texte à afficher et le délai de clignotement. Remarquez que le temps d'affichage du bouton vide est plus court. <html><head><title>Bouton clignotant</title> <STYLE type="text/css"> .petit {font-family:arial;font-size:12px} </STYLE> <SCRIPT LANGUAGE="JavaScript"> function GoClignoter() { var delai1=500; // temps d'affichage du texte exprimé en millisecondes (ici 0.5 seconde) var delai2=200; // temps d'affichage du bouton vide var texte="TEXTE CLIGNOTANT"; // Texte à afficher var bouton=document.cligno.clignoter; // ici on récupère le bouton concerné if (bouton.value=="") { bouton.value=texte; delai=delai1; } else { bouton.value=""; delai=delai2; } setTimeout("GoClignoter()",delai); } </SCRIPT> </HEAD> <FONT SIZE="2" COLOR="navy" face="arial"> <CENTER><BIG><B>Bouton de formulaire clignotant</B></BIG></CENTER> <BR><BR> Ce script fait clignoter le libellé d'un bouton. Le texte et les délais d'affichage sont paramétrables.<BR> Le délai d'affichage du bouton vide est plus court qu'avec le texte afficher. <FORM name="cligno"> <CENTER><INPUT type="button" name="clignoter" style="width:150px" value="Texte du bouton" onClick="alert('Bouton inactif dans cet exemple')"></CENTER> </FORM> <A href="javascript:GoClignoter()">Cliquez pour démarrer le clignotement du bouton</A> <BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR> <BR> </FONT> </body> </html> Les formulaires - Contrôles de saisies Au sommaire : 1 - Est-ce 2 - Est-ce 3 - Est-ce un nombre ? une date ? un mail ? 1 - Est-ce un nombre ? Il peut être utile de vérifier que la saisie dans un champ de formulaire est bien un nombre : saisie de quantités, de prix... 123A : Saisir ici : Soit nb le champ à tester. Si !(isNaN(nb)) retourne true, alors nb est un nombre. 2 - Est-ce une date ? Cette fonction vérifie la saisie d'une date au format jour/mois/année. Entrez une date au format JJ/MM/AAAA Voici la fonction CheckDate(d), où d est une chaîne de caractères. function CheckDate(d) { // Cette fonction vérifie le format JJ/MM/AAAA saisi et la validité de la date. // Le séparateur est défini dans la variable separateur var amin=1999; // année mini var amax=2005; // année maxi var separateur="/"; // separateur entre jour/mois/annee var j=(d.substring(0,2)); var m=(d.substring(3,5)); var a=(d.substring(6)); var ok=1; if ( ((isNaN(j))||(j<1)||(j>31)) && (ok==1) ) { alert("Le jour n'est pas correct."); ok=0; } if ( ((isNaN(m))||(m<1)||(m>12)) && (ok==1) ) { alert("Le mois n'est pas correct."); ok=0; } if ( ((isNaN(a))||(a<amin)||(a>amax)) && (ok==1) ) { alert("L'année n'est pas correcte."); ok=0; } if ( ((d.substring(2,3)!=separateur)||(d.substring(5,6)!=separateur)) && (ok==1) ) { alert("Les séparateurs doivent être des "+separateur); ok=0; } if (ok==1) { var d2=new Date(a,m-1,j); j2=d2.getDate(); m2=d2.getMonth()+1; a2=d2.getYear(); if (a2<=100) {a2=1900+a2} if ( (j!=j2)||(m!=m2)||(a!=a2) ) { alert("La date "+d+" n'existe pas !"); ok=0; } } return ok; } 3 - Est-ce un mail ? Pour vérifier qu'un mail est valide, il suffit de tester la présence de @ et du point. function verifiermail(mail) { if ((mail.indexOf("@")>=0)&&(mail.indexOf(".")>=0)) { return true } else { alert("Mail invalide !"); return false } } Cette fonction vérifie la présence du caractère @ et du . pour vérifier la validité. Si ces 2 caractères sont trouvés, la fonction retourne true sinon, elle affiche un message et retourne false.