Une zone de saisie limite les messages à 280 caractères
Exercice d'entraînement · niveau 2 · NSI (première), chapitre 10 — Interagir sur le Web · La page et ses événements
Énoncé
Une zone de saisie limite les messages à 280 caractères ; un paragraphe annonce en permanence le nombre de caractères restants, et passe au rouge si le compte devient négatif.
<textarea id="msg" maxlength="300"></textarea>
<p id="reste">280 caracteres restants</p>
- Écrire le gestionnaire.
- Pourquoi écouter
inputplutôt quekeydown? Donner deux raisons. - L'attribut
maxlength="300"pose deux problèmes. Lesquels ?
Corrigé
1.
const msg = document.getElementById("msg");
const reste = document.getElementById("reste");
msg.addEventListener("input", function () {
const n = 280 - msg.value.length;
reste.textContent = n + " caracteres restants";
if (n < 0) {
reste.style.color = "red";
} else {
reste.style.color = "black";
}
});
2. Deux raisons, et la seconde est la plus grave :
keydownsurvient avant que le caractère soit inséré dans le champ. Le compte serait donc systématiquement décalé d'une unité — un défaut qui ne se voit qu'en comptant, jamais en regardant ;keydownrate tout ce qui ne passe pas par le clavier : un collage à la souris, un glisser-déposer, une saisie vocale, une suggestion du téléphone. L'événementinputsignifie « le contenu a changé », quelle qu'en soit la cause. C'est exactement ce que l'on veut surveiller.
3. Deux problèmes.
- Il contredit la règle annoncée. L'utilisateur peut saisir jusqu'à caractères alors que le message dit : entre les deux, il voit un compte négatif en rouge sans que rien ne l'arrête. Deux nombres, deux vérités.
- Il ne protège rien.
maxlengthest une contrainte de la page, donc du client : elle disparaît si l'on envoie la requête autrement. Le serveur doit vérifier la longueur lui-même, et c'est lui qui décide de la vraie limite.
À retenir : la limite affichée, la limite du champ et la limite vérifiée par le serveur doivent être le même nombre — écrit une seule fois, côté serveur, et transmis à la page.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.