JS Et Les Formulaires
JS Et Les Formulaires
JS Et Les Formulaires
Les formulaires enrichissent les pages web en permettant à l'utilisateur de saisir des informations
sous différentes formes : zone de texte, cases à cocher, listes déroulante, etc. À l'intérieur d'une
page web, un formulaire est défini sous la forme d'une balise HTML <form> contenant différents
champs de saisie : balises<input>,<select> ou encore<textarea>.
Classiquement, les données saisies par l'utilisateur dans un formulaire sont ensuite envoyées via
le réseau à un serveur web qui va les traiter et renvoyer une réponse adaptée au navigateur
client sous la forme d'une nouvelle page web. Pour réaliser cette tâche, un serveur web emploie
une technologie adaptée, comme par exemple le langage PHP.
Le mécanisme
client/serveur du Web
Grâce à JavaScript, nous allons pouvoir manipuler le formulaire et ses données directement côté
navigateur client, avant (éventuellement) d'envoyer ces données vers un serveur externe. Ainsi,
on pourra avertir immédiatement l'utilisateur en cas de saisie erronée, ou bien lui proposer une
liste de suggestions au fur et à mesure de sa frappe, et bien d'autres choses encore.
Le formulaire d'exemple
Une zone de texte permet à l'utilisateur de saisir du texte sur une ou plusieurs lignes. Une zone
monoligne correspond à la balise HTML<input type="text">. Une zone multiligne est définie
grâce à la balise<textarea>.
Voici l'extrait du formulaire précédent qui permet de créer la zone de saisie du pseudo.
<label for="pseudo">Pseudo</label> :
<input type="text" name="pseudo" id="pseudo" required>
<span id="aidePseudo"></span>
En JavaScript, on accède à la valeur d'une zone de texte en utilisant la propriété value de
l'élément du DOM correspond. En donnant une nouvelle valeur à cette propriété, on modifie la
valeur affichée dans la zone de texte.
L'exemple suivant donne à la zone de saisie identifiée par "pseudo" la valeur "MonPseudo".
Gestion du focus
Lorsqu'une zone de texte est la cible de saisie, on dit que cette zone possède le focus.
L'utilisateur d'un formulaire qui clique sur une zone de saisie pour y taper une information
déclenche l'apparition d'un événement de type focus. Inversement, le changement de cible de
saisie provoque l'apparition d'un événement de type blur sur l'ancienne zone qui avait le focus.
On peut utiliser ces événements pour afficher à l'utilisateur une aide contextuelle associée à la
zone de saisie courante, comme dans l'exemple suivant.
En cliquant dans la zone de saisie du pseudo, vous obtenez l'affichage d'un message informatif
dans la balise<span> prévue à cet effet et initialement vide.
Depuis le code JavaScript, on peut modifier la cible de saisie en appelant les méthodes focus
(pour donner le focus) et blur (pour l'enlever) sur un élément du DOM.
La vérification des données saisies dans une zone de texte est abordée plus loin dans ce
chapitre.
Cases à cocher
On définit une case à cocher dans un formulaire avec la balise <input type="checkbox">.
Voici l'extrait du formulaire initial qui permet de demander à l'utilisateur s'il souhaite ou non
obtenir une confirmation de son inscription.
L'exemple de code ci-dessous gère les événements change sur la case à cocher pour afficher
dans la console le choix effectué lorsque l'utilisateur clique dans la case ou sur le libellé associé.
Un groupe de boutons radio permet à l'utilisateur de faire un seul choix parmi plusieurs
possibilités. On crée ces boutons avec des balises<input type="radio"> possédant le même
attribut name et des attributs value différents.
Voici l'extrait du formulaire initial qui crée trois boutons radio permettant de choisir un type
d'abonnement.
Listes déroulantes
On construit une liste déroulante au moyen d'une balise <select> dans laquelle on ajoute une
balise<option> par choix possible dans la liste.
Voici l'extrait du formulaire initial qui crée une liste déroulante contenant trois nationalités.
L'exemple ci-dessous affiche quelques informations sur les champs de saisie du formulaire initial.
Un formulaire est soumis lorsque l'utilisateur clique sur le bouton d'envoi. Ce bouton correspond
à une balise<input type="submit">. Une balise<input type="reset"> affiche un bouton
qui réinitialise les données du formulaire.
Voici l'extrait du formulaire initial qui affiche deux boutons dans le formulaire.
En règle générale, la soumission d'un formulaire se traduit par l'envoi de ses données à la
ressource identifiée par l'attributactionde la balise <form>. Mais avant cela, un événement de
typesubmitest déclenché sur l'élément du DOM correspondant au formulaire. En ajoutant un
gestionnaire pour ce type d'événement, on peut accéder aux données du formulaire avant leur
envoi. On peut même annuler l'envoi ultérieur des données en appelant la
méthodepreventDefaultsur l'objetEventassocié à l'événement.
L'exemple de code ci-dessous affiche dans la console l'ensemble des informations saisies ou
choisies par l'utilisateur, puis utilise la méthode preventDefaultpour annuler l'envoi des
données du formulaire.
Cette dernière technique consiste simplement à ajouter des vérifications dans le gestionnaire des
événementssubmitsur le formulaire. Nous allons étudier de plus près les deux autres.
Validation pendant la saisie
L'exemple de code suivant ajoute un gestionnaire pour les événements inputsur la zone de
saisie du mot de passe. Ce gestionnaire vérifie la longueur (nombre de caractères) du mot de
passe saisi et affiche à l'utilisateur un message ayant un contenu et une couleur appropriés.
Imaginons par exemple que l'on veuille contrôler le courriel saisi par l'utilisateur de notre
formulaire. Dans un premier temps, on souhaite vérifier uniquement la présence du
caractère@dans le courriel saisi. Pour cela, on peut utiliser la méthode JavaScript indexOf, qui
permet de chercher une valeur dans une chaîne de caractères et renvoie la valeur -1 si cette
valeur n'est pas trouvée.
Notre vérification précédente est pour le moins primitive : il ne suffit pas qu'une chaîne contienne
au moins une fois le caractère@pour en faire une adresse de courriel valide. Il est possible de
définir des critères de contrôle beaucoup plus stricts en utilisant ce qu'on appelle une expression
régulière.
On définit une expression régulière JavaScript en plaçant son motif entre deux caractères /. La
variable ainsi créée est un objet. Sa méthode test détecte la présence d'une correspondance
avec le motif dans la chaîne de caractères passée en paramètre, et renvoie true oufalseselon
le cas.
[abc] La chaîne contient soit "a", soit "b", soit abc, daef, bbb, def, xyz,
"c" 12c34 123456, BBB
[a-z] La chaîne contient n'importe quelle lettre abc, 12f43, 123, ABC, _-_
minuscule de l'alphabet _r_
a.c La chaîne contient "a" suivi d'un abc, acc, ac, abbc, ABC
caractère (n'importe lequel) suivi de "c" 12a.c34
Avant d'aller plus loin, essayez de décoder ce motif et de trouver quelles conditions doit remplir
une chaîne de caractères pour lui correspondre.
Vous avez bien cherché ? Allez, voici la réponse : ce motif représente une chaîne qui :
Voici comment mettre en oeuvre cette technique pour notre exemple. Modifiez le gestionnaire de
l'événementblursur la zone de saisie du mot de passe de la manière suivante.