Javascript - Pour rendre vos pages interactives

Auteur: Mohamed CHINY Durée necessaire pour le cours de Javascript - Pour rendre vos pages interactives Niveau recommandé pour le cours de Javascript - Pour rendre vos pages interactives Supports vidéo non disponibles pour ce cours Exercices de renforcement disponibles pour ce cours Quiz disponible pour ce cours

Page 12: Exercice

Toutes les pages

Exercice sur les chaînes de caractères

Contrôle de nombre de caractères

Vous avez probablement envoyé un SMS gratuitement depuis le site Web de votre opérateur mobile, où postulé votre site Web à un annuaire de recherche en vue d'en acquérir un back-link. Si c'est le cas, alors vous avez certainement compris l'objectif de l'exercice.

Nous voulons créer un une zone de texte (ou espace de texte) pour que l’internaute puisse y saisir un texte quelconque. On suppose que celui ci ne doit pas contenir plus de 60 caractères. Pour que l'internaute ne soit pas surpris par le refus de son post suite à un excès de caractères, nous allons prévoir une zone de texte en bas du textarea qui affiche le nombre de caractères restants. Ce nombre sera automatiquement calculé à chaque modification du texte par le clavier (pour simplifier l'exercice, nous n'allons pas traiter le cas où l'internaute fait un copier-coller dans la zone de saisie).

Si la taille du texte saisi dépasse la longueur maximale spécifiée, alors un message alert() s'affiche pour signaler à l'internaute l'excès de caractères, en plus, tout ce qui dépasse est automatiquement supprimé pour ne conserver que les 60 premiers caractères autorisés.

Pour avoir une idée plus claire sur ce qu'on doit faire, voici un exemple:

caractère(s) restant(s).
Dans cet exemple, je me suis contenté d'un maximum de 30 caractères pour stopper la saisie.

Solution

<!DOCTYPE html>
<html>
   <head>
      <meta charset="UTF-8" />
      <script language="javascript">
         max=60;
         function saisie(){
            if(document.fo.sms.value.length>max){
               alert("Vous avez dépassé "+max+" caractères!");
               document.fo.sms.value=document.fo.sms.value.substring(0,max);
            }
            document.fo.restant.value=max-document.fo.sms.value.length;
         }
         function init(){
            document.fo.sms.value="";
            document.fo.sms.focus();
            saisie();
         }   
      </script>
   </head>
   <body onLoad="init()">   
      <form name="fo">
         <input type="text" size="70" name="sms" onKeyUp="saisie()">
         <br />
         <input type="text" name="restant" size="3" readonly>
         caractère(s) restant(s).
      </form>
   </body>
</html>
Des explications s'imposent. En fait, vous avez encore remarqué la fonction init() appelée au chargement de la page. Elle sert à exécuter certaines opérations au tout début, avant même que l'internaute ne commence à saisir. Elle permet de vider l'espace (ou zone) de texte, activer le champs de saisie pour que le curseur y soit placé directement, et en fin, appeler la fonction saisie() qui affichera dans la zone de texte le nombre de caractères restants.

Concernant le nombre maximal de caractères à ne pas dépasser, je l'ai déclaré en tant que variable max à laquelle j'ai affecté la valeur 60. De cette manière on peut autoriser plus ou moins de caractères en changeant seulement la valeur de cette variable.

L’événement qui appelle la fonction saisie() sera évidemment associé au clavier. J'ai opté pour onKeyUp. Comme ça, la fonction ne s'exécutera qu'après que l'utilisateur aie relâché la touche.

Vous avez peut être remarqué l'attribut HTML readonly sur la zone de texte qui affiche le compteur. Cet attribut empêche toute modification du texte directement dans la zone sur laquelle il est appliqué. Il s'agit d'un attribut booléen dans la valeur vaut implicitement true.