Le langage JavaScript
Le langage JavaScript permet d'ajouter un contrôle au niveau du client qui reçoit une page HTML. C'est un lanage qui s'interprète sous la forme des scripts embarqués dans le code HTML. Il est basée sur deux technologies :
1) Le modèle DOM.
Ce modèle propose une description objet et hiérarchique d'un document HTML :
fig 1 le modèle DOM
Cette organisation permettra d'écrire :
document.forms[0].elements[0].value="bonjour"; // l'objet Window est implicite
Ecriture du code JavaScript.
Un premier exemple.
var nom = prompt("nomsvp","");
document.write("bonjour " + nom);
Ce code ouvre une boite dialogue
fig 2 boite de dialogue
et affiche ensuite dans le document la chaîne "bonjour patrice"
Eléments du langage.
Nous n'abordons succintement que les éléments particuliers de JavaScript. Il suit la syntaxe standard aujourd'hui (java, C#), il est sensible à la casse.
Les variables en JavaScript.
La déclaration des variables n'est pas obligatoire, son type est implicite au moment de la première affectation. Mais son type peut changer ; une variable a le type de sa dernière affectation. 4 types de base sont proposés :
JavaScript propose deux portées :
Les structures de contrôle.
La syntaxe est celle de C, java ou C#; nous n'y reviendrons pas
Fonctions
Le terme générique function est utilisé pour les fonctions et procédures, seule l'instruction return les distingue.
function estHumain(age){
return (age>0 && age<125)
}
var ageSaisi = prompt("Age svp ","");
if(!estHumain(ageSaisi))
alert ("vous n'êtes
pas humain");
else
alert("ok");
provoque :
![]() |
![]() |
fig 3 validation numérique
function produit(){
var args=produit.arguments;
var nbArgs=produit.arguments.length;
var p=1;
for(var i=0;i<nbArgs;i++)
p*=args[i];
return p;
}
var pro = produit(4,5,9); // retourne 180
var pro = produit(5,7) ; //retourne 35
Extraction de type à partir d'une chaîne.
Les tableaux.
Se déclare à l'aide de l'opérateur new, n'est pas typé :
var tab =new Array(4);
tab[0]=12;
tab[1]="toto";
tab[2]=45;
tab[3]=78;
for(var i=0;i<tab.length;i++) // length référe
le nombre d'éléments déclaré
document.write(tab[i]);
De nombreux services sont disponibles : split, reverse...
Les chaînes de caractère.
Très proche de Java :
ch = "Bonjour le Monde";
ch.charAt(1) // retourne 'o'
ch.IndexOf('o') // ou ch.IndexOf("o") retourne 1
ch.IndexOf('o',3) // retourne 4
ch.lastIndexOf('o') // retourne 12
ch.substring(8,2) // retourne "le"
ch.toLowerCase() // retourne "bonjour le monde"
ch.toUpperCase() // retourne "BONJOUR LE MONDE"
D'autres méthodes sont disponibles : concat, split, ...
Le débogage.
Les navigateurs peuvent alerter en cas d'erreur dans les scripts. Ceci dépend du navigateur. Pour IIx, un message apparaît en bas à gauche :
fig 4 alerte JavaScript
Si l'on double-clique sur l'icône on fait apparaître une boite de dialogue, le choix de visualiser les détails indique la ligne concernée :
fig 5 débogueur JavaScript
2) Le modèle événementiel
le langage JavaScript s'appuie sur un modèle de développement utilisant des événements associés aux éléments HTML.
fig 6 événements JavaScript
fig 7 événements associés aux objets
Exemples
exemple 1 : vérification d'une saisie vide.
Une fonction vérifie la présenced'une chaîne de caractères :
function verifSaisieNulle(ch){
if(ch.length==0)
alert("il
faut saisir votre nom");
}
Cette fonction est appelé sur l'événement onBlur (perte de focus) de la zone de nom :
<input type=text name="nom" maxlength=15 size=20 onBlur=verifSaisieNulle(this.value)>
remarque : le code JavaScript n'est pas écrit ici dans des balises.
Ce qui provoquera dans le cas de saisie incorrecte:
fig 8validation de l'exitence du contenu d'un champ
exemple 2 : vérification de plusieurs champs
Si l'on désire vérifier les saisies dans les deux champs on modifie la fonction afin de controler toutes les zones de textes :
function verifSaisieNulleBis(){
var nb = document.forms[0].length;
for(var i =0;i<nb;i++)
if(document.forms[0].elements[i].value.length==0)
alert("il
faut saisir tous les champs");
}
L'événement onClick du bouton Envoyer va appeler cette fonction :
<input type=submit name=Submit value=Envoyer onClick= verifSaisieNulleBis()>
Mais si l'on effectue des saisies invalides (champs vides), après la fermeture des boites de dialogues, le formulaire est néanmoins
envoyé. Il faut donc bloquer cet envoi :
function verifSaisieNulleBis(){
var nb = document.forms[0].length;
for(var i =0;i<nb;i++)
if(document.forms[0].elements[i].value.length==0){
alert("il
faut saisir tous les champs");
return
false;
}
return true;
}
L'appel de la fonction sera un peu différent :
<input type=submit name=Submit value=Envoyer onClick="return verifSaisieNulleBis()">
3) Les expressions régulières
Les validations logiques de saisie, responsabilité souvent incombant à JavaScript, nous font entrer dans un monde en soi que sont les expressions régulières. Issues du monde Unix, elles permettent de vérifier la cohérence d'une chaîne de caractère. Par exemple, vérifier si une chaine peut-être une adresse mail, ou un code postal ou un numéro de téléphone mobile etc...
C'est un vaste domaine qu'il n'est pas question de d'aborder dans le détail ici. Nous n'allons présenter que quelques aspects.
Une expression régulière permet de décrire une chaîne de caractères en fonction de carcatères spéciaux prédéfinis :
fig 9 caractères spéciaux (extrait du site commentcamarche.net)
Remarque : les règles de gestion des expressions régulières sont indépendantes des langages; c'est un langage en soi
Exemples :
Modèles
|
Exemples
|
/ma/ | mari, emma, demandé |
/^ma/ | mari |
/ma$/ | emma |
/^maison$/ | maison |
/al+/ | ralentir,rallier,calibre |
/al*/ | ralentir, rallier, rateau, calibre |
/^ral+/ | ralentir, rallier |
/^ra{2}/ | rallier |
/^ral{1,3}/ | ralentir, rallier, ralllou |
/(ra){1,3}/ | tarara, tara, tirarace |
/un|le/ | un chat, le chat |
/^.{3}$/ | lui, non, une (3 caractères uniquement) |
/[abc]/ | chat, bal, bien (contient a ou b ou c) |
/^[a-z]/ | bateau ( commence par une lettre minuscule) |
/^[^a-zA-Z]/ | 5 bateaux (ne commence pas par une lettre) |
Utilisation.
1) En utilisant les string.
Fonction qui vérifie que les caractères saisis sont alphabétiques
function controle(ch){
var modele =/^[A-Za-z]+$/;
if(ch.search(modele)!=-1)
alert("ok");
else
alert("pas
ok");
}
Remarque:
2) En utilisant la classe RegExp
var modele =new RegExp("^[A-Za-z]+$");
if(modele.test(ch))
Exemples :
function evalMdP(ch){
var modele = new RegExp("^[a-zA-Z]{5,8}$");
if(modele.test(ch))
alert("valide :");
else
alert ("pas
valide :");
}
function verifNumeroMobile(ch){
var modele = new RegExp("^(06)[0-9]{8}$");
if(modele.test(ch))
alert("valide
:"+ch);
else
alert ("pas
valide :"+ch);
}
Function verifMail(ch){
var modele=new RegExp("^[a-zA-Z0-9\-_]+[a-zA-Z0-9\.\-_]*@[a-zA-Z0-9\-_]+\.[a-zA-Z\.\-_]{1,}[a-zA-Z\-_]+")
if(modele.test(ch))
alert("valide
:"+ch);
else
alert ("pas
valide :"+ch);
}