Lire les valeurs des champs, intercepter l'envoi d'un formulaire, valider les données et afficher les erreurs, réagir à la saisie au clavier et activer ou désactiver un bouton.
1Situer
Le festival Gnaoua d'Essaouira ouvre les inscriptions pour ses bénévoles. Le formulaire doit refuser un e-mail sans @, un âge de moins de 18 ans, un message trop long, et n'autoriser l'envoi qu'une fois la charte acceptée. Les attributs HTML5 vus au module 04 ne suffisent pas pour des règles sur mesure et des messages clairs : JavaScript prend le relais.
2Comprendre
Valider un formulaire en JavaScript
Le bénévole remplit le formulaire et clique sur Envoyer : l'événement submit se déclenche sur le formulaire.
1 / 5
Lire les champs
const prenom =document.querySelector('#prenom').value.trim(); // texte sans espaces autourconst age =Number(document.querySelector('#age').value); // value est une chaîneconst accepte =document.querySelector('#charte').checked; // case à cocher
Intercepter l’envoi
form.addEventListener('submit', (e) => {
e.preventDefault(); // pas d'envoi, pas de rechargementconst erreurs = [];
if (!email.includes('@')) erreurs.push('E-mail invalide');
if (age <18) erreurs.push('Il faut avoir 18 ans');
if (erreurs.length) {
zoneErreurs.textContent= erreurs.join(' · ');
return; // on s'arrête là
}
// tout est correct : envoyer les données (AJAX, partie E) ou afficher un message
});
On écoute submit sur le formulaire, pas click sur le bouton : ainsi la touche Entrée est aussi gérée.
Réagir pendant la saisie
Événement
Moment
input
à chaque modification
change
à la sortie du champ, ou au choix d’une case, d’un radio, d’une option
focus / blur
le champ devient actif / inactif
keydown
une touche est enfoncée (e.key)
charte.addEventListener('change', () => {
bouton.disabled=!charte.checked; // bouton actif seulement si coché
});
HTML5 et JavaScript ensemble
Les attributs required, type="email", min… (module 04) font une première vérification. JavaScript ajoute des règles sur mesure, des messages clairs et des vérifications en direct. Et le serveur vérifie toujours une dernière fois.
Exemple simple
Le contrôleur à l'entrée
Avant de laisser passer le dossier, le contrôleur vérifie chaque pièce. S'il manque quelque chose, il arrête le dossier (preventDefault) et explique ce qui manque.
form.addEventListener('submit', (e) => {
e.preventDefault(); // on garde la main
if (!email.value.includes('@')) {
erreurs.textContent = 'E-mail invalide';
}
});
Exemple simple
Le compteur de caractères
Comme le compteur d'un SMS, l'événement input se déclenche à chaque caractère tapé : on peut afficher en direct combien il en reste.
Plutôt qu'un message global, ajoutez la classe invalide sur le champ e-mail quand il est faux, et retirez-la quand il devient correct pendant la saisie.