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);
}