Vous pouvez me contacter via Facebook pour questions & suggestions :
Page Facebook relative à mon site
Une exception en JavaScript c'est une erreur qui se produit en cours d'exécution. On dit que l'erreur déclenche une exception ou que l'erreur lève une exception.
Pour gérer les erreurs il faut utiliser la structure try ... catch ....
Donc script sans utilisation de try ... catch ...
Saisissez 40 : le programme affiche que vous êtes nés en 1984
Saisissez 4O (le chiffre 4 puis la lettre O : le programme affiche que vous êtes né en 2000 ...
Il y a donc une erreur mais laquelle ?
Le navigateur considère en effet que vous avez saisi 4 car la fonction parseInt() est très permissive et
parvient à convertir en entier du moment que les premièrs caractères saisis sont des chiffres.
Donc avec emploi cette fois de la structure try ... catch ...
Dans le code HTML une balise P identifiée "message" (et vide de tout contenu) a été ajoutée.
document.querySelector('button').onclick =function() { const message = document.getElementById("message"); try { var age = prompt("saisir votre âge sous forme d'un entier"); if(isNaN(age)) throw "vous n'avez pas saisi un entier" ; var age = parseInt(age); var annee_naiss = 2024 - age alert("Vous êtes né en :" + annee_naiss); } catch(err) { message.innerHTML = err; } } // fin fonction ...
Dans le script notez l'emploi de l'instruction throw qui génère un message d'erreur personnalisé si la
saisie dans "age" n'est pas une suite de chiffres.
Ce message est capturé par le bloc catch et affiché dans la balise H3 identifiée "message".
L'instruction if (test) throw(expression) permet donc de créer des messages d'erreurs personnalisés qui sont
ensuite capturés dans le bloc catch.
Saisissez 40 : le programme affiche que vous êtes nés en 1984
Saisissez 4O (le chiffre 4 puis la lettre O : le programme n'affiche pas de résultat abérrant mais affiche le message : "vous n'avez pas saisi un entier".
Dans les deux exemples qui vont suivre il y aura aussi gestion des éventuelles erreurs de saisie mais cette fois les saisies se font dans le cadre de champs de formulaire.
L'utilisateur doit saisir dans le premier champ d'un formulaire une valeur numérique compris entre 5 et 10. Une erreur de saisie éventuelle doit lui être signalée.
document.querySelector('button').onclick =function() { const message = document.getElementById("message"); var nombre = document.getElementById("nombre").value; message.innerHTML = "" ; //pour écraser l'éventuel message d'erreur précédent try { if(nombre == "") throw "est vide"; if(isNaN(nombre)) throw "ne contient pas un nombre "; if(nombre > 10) throw "trop grand"; if(nombre < 5) throw "trop petit"; } catch(err) {message.innerHTML = "Le contenu du premier champ " + err; } } // fin fonction anonyme
Comme dans l'exemple précédent le message d'erreur personnalisé est injecté dans l'élément H3 identifié "message".
La version 5 de HTML évite parfois le recours à la programmation JS.
Mais attention les champs de saisie doivent être inclus dans le conteneur FORM et le bouton de commmande
doit être de type "submit" sinon les contrôles de saisie "navigateur" (grâce aux attribut required & pattern) ne seront pas disponibles.
Le code (avec uniquement du HTML) :
Observez la feuille de style interne pour formater les champs de saisie.
Notez bien les attributs des champs dont required (saisie obligatoire) et placeholder(légande de saisie).
Dans un champ de type number on ne peut saisir qu'une suite de chiffres (donc on ne peut saisir un nombre décimal).
L'élément BUTTON doit être de type submit.
Lors de la soumission il faut qu'il y ait aussi appel d'une fonction JS d'où la syntaxe particulière de l'élément FORM :
<form on submit = "instruction JS" >
Les ID des champs sont devenus inutiles puisqu'il n'y a plus de script qui pourrait référencer les éléments via leur ID.
Le rendu :
Si soumission exécution de l'instruction JS alert(). Et la soumission n'est possible que si les champs sont correctement renseignés.
Il est possible de saisir un décimal dans un champ de type "number" à condition de rajouter l'attribut step ='any'.
L'utilisateur saisit un pseudo qui doit comprendre entre 8 et 16 caractères alphanumériques (chiffres ou lettres) ;
lettres en majuscules ou minuscules.
C'est l'occasion de faire une "piqure de rappel" sur les expression régulières.
document.querySelector('button').onclick =function() { var message = document.getElementById("message"); var pseudo = document.getElementById("pseudo").value; message.innerHTML =""; // effacer éventuel message d'erreur devenu obsolète var reg = new RegExp("^[0-9A-z]{8,16}$"); try {if(!reg.test(pseudo)) throw "le pseudo " + pseudo + " n'est pas valide " ; } catch(err) { message.innerHTML = err; } } // fin fonction ...
Notez bien le gabarit à respecter : ^[0-9A-z]{8,16}$"
Ce motif précise qu'il faut saisir entre 8 et 16 chiffres ou lettres (majuscules et minuscules). En effet la lettre A est en majuscule et la lettre z en minuscule. Donc la plage de lettres autorisées couvre les majuscules et minuscules.
Saisissez des pseudos trop courts (moins de 8 caractères) OU des pseudos avec des symboles interdits (*,!, ? , etc.) ou des lettres
accentuées.
Observez le message d'erreur généré à chaque fois.
Si aucun message n'est affiché c'est que le pseudo est enfin correct.
Comme dans le thème précédent je vous propose une autre solution basée sur uniquement du code HTML (pas de script).
L'attribut pattern de la balise INPUT peut avoir pour valeur une expression régulière.
Le code (uniquement du HTML mais du 5 !) :
Notez bien les attributs des INPUT en particulier pattern ="expression régulière".
Dans le deuxième champ on peut saisir des espaces (le blanc après A-z).
Les ID des champs deviennent inutiles puisqu'il n'y a plus de script.
Lors de la soumission il faut qu'il y ait aussi appel d'une fonction JS d'où la syntaxe particulière de l'élément FORM :
<form on submit = "instruction JS" >
Le rendu :
Si soumission exécution de l'instruction JS alert().
La soumission n'est possible que si les deux champs sont correctement renseignés.