JavaScript Complet
JavaScript Complet
LECON1 :
Introduction au langage JavaScript
I. Généralités
Le JavaScript est un langage de script incorporé au langage HTML. Il est créé par Netscape en
décembre 1995. Un Script est une portion de code inséré dans une page HTML et qui permet
d’exécuter une tâche.
Ce langage est un langage de programmation qui permet d'apporter des améliorations au langage
HTML en permettant d'exécuter des commandes du côté client. Le JavaScript est un langage
interprété (besoin du navigateur pour interpréter le code). Contrairement à HTML c’est un
langage sensible à la CASSE c'est-à-dire qu’il fait une différence entre les variables contenant
des majuscules ou pas. Mavariable, MaVariable et Mavariable sont des variables différentes pour
JavaScript.
Le JavaScript est majoritairement utilisé sur Internet, conjointement avec les pages web HTML
dans lesquelles il est inclus (ou dans un fichier externe). Le JavaScript permet de « dynamiser »
une page HTML en ajoutant des interactions avec l’utilisateur, des animations, de l’aide à la
navigation. Par exemple :
Afficher/masquer du texte ;
Le JavaScript est un langage dit client-side, c’est-à-dire que les scripts sont exécutés par le
navigateur de l’internaute (le client).
1- Pour écrire des scripts JavaScript il faut avoir une bonne connaissance du langage HTML.
ou
<script type="text/javascript"> votre code javascript ici</script >
ou
<script src ="[Link]"></script > (appel d'un fichier externe)
La méthode la plus utilisée pour insérer un script JavaScript et celle utilisée par la plus grande
majorité des programmeurs consiste à insérer directement le code dans une page HTML aux
endroits suivants :
L’insertion d’un script JavaScript à l’intérieur des balises <head></head> permet d’exécuter le
code JavaScript d’une manière différée, c'est-à-dire que le code est d’abord lu par le navigateur,
Nous pouvons insérer un code JavaScript en appelant un fichier externe dont l’extension est js.
Dans ce cas, nous pouvons appeler le fichier en question soit dans le corps du code HTML entre
<body></body> ou à l’intérieur des balises <head></head>. Pour appeler un fichier externe, il
suffit d’utiliser la balise :
Exemple
Le code JavaScript contenu dans les balises est toujours attaché à un événement. Les événements
sont des attributs des balises HTML et ne sont pas applicables à toutes les balises. Par exemple,
une image (« img ») ne pourra pas réagir à l'événement « onClick ».
Comme tout programme, un code JavaScript doit être documenté. L’insertion de commentaires
aide à expliquer certaines instructions du code JavaScript :
Pour insérer un commentaire sur plusieurs lignes (consécutives) placer le entre /* et */ (/*
commentaires */)
Pour déclarer une variable, il vous faut d'abord lui trouver un nom. Il est important de préciser
que le nom d'une variable doit respecter certaines conditions :
Un nom de variable doit commencer par une lettre (majuscule ou minuscule) ou un "_"
Un nom de variables peut comporter des lettres, des chiffres et les caractères _ et & (les
espaces ne sont pas autorisés !)
Aucun mot réservé ne doit être utilisé pour les noms de variables
abstract, boolean, break, byte, case, catch, char, class, const, continue, debugger, default, delete,
do, double, else, export, extends, false, final, finally, float, for, function, var, …
La déclaration de la variable peut contenir ou non le mot clef var. Une variable déclarée avec le
mot clef var (on parle de déclaration explicite) est locale à la fonction où la variable est déclarée.
Une variable déclarée sans le mot clef var (on parle de déclaration implicite) est globale.
var myVariable ;
Le type number : Il représente tous les nombres, que ce soit un entier, un négatif, un
nombre scientifique, etc... Bref, c'est le type pour les nombres. Pour assigner un type
numérique à une variable, il vous suffit juste d'affecter le nombre à la variable :
var number = 5;
Le type string : Ce type représente n'importe quel texte. On peut l'assigner de deux
façons différentes :
3- Les opérateurs
Dans la plupart des cas les opérateurs utilisés en C sont les mêmes qu’en JavaScript
Exemple :
Opérateurs Rôle ou signification
Arithmétique
+ Addition de nombres ou concaténation de chaînes de caractères
- Soustraction
* Multiplication
/ Division
% Modulo (reste de le division)
++ Incrémentation (ajouter 1)
-- Décrémentation (retirer 1)
Logique
&& Opérateur logique qui veut dire ET
|| Opérateur logique qui veut dire OU
! Non
Comparaison
Égal (vérifier l’égalité du contenu de deux nombre, s’utilise
==
dans un test d’une condition)
Égal (vérifier l’égalité du contenu et du type de deux nombre,
===
s’utilise dans un test d’une condition)
!= Inégal ou différent
> Supérieur
>= Supérieur ou égal
< Inférieur
<= Inférieur ou égal
Affectation
= var1=var2 veut dire var1 reçoit le contenu de var2
+= var1+=var2 identique à var1 =var1+var2
-= var1-=var2 identique à var1 =var1-var2
*= var1*=var2 identique à var1 =var1*var2
/= var1/=var2 identique à var1 =var1/var2
%= var1%=var2 identique à var1 =var1%var2
Concaténation
+ L'opérateur + permet de concaténer deux chaînes
4- Conversions de types
JavaScript est (très) souple sur la notion de typage. JavaScript applique « automatiquement »
certaines conversions de type sur les valeurs lorsque le contexte le nécessite :
Une chaine dont les caractères représentent un nombre est convertie en ce nombre
NB : dans une expression avec l’opérateur + (opérateur de concatenation) c’est la conversion
vers chaine qui l’emporte
NaN (Not a Number) est la valeur de retour pour toute expression qui ne peut être
convertie en un nombre. On peut tester si le contenu d’une variable est un nombre avec
la fonction isNaN.
" 12.5 " *3; // -> 37.5
"99" -5; // -> 94
"99"+5 // -> "995"
" deux " *3; // -> NaN
isNaN (" deux " *3) ; // -> true
parseInt() et parseFloat()
Ils permettent de convertir une chaine en nombre (entier ou flottant). Seul le premier nombre
dans la chaine est retourne, les autres caractères (y compris correspondant à des nombres) sont
ignorés si le premier caractère ne peut être converti en un nombre, le résultat sera NaN. Les
espaces en début sont également ignorés
Exemple :
parseFloat ("1.24 "); // -> 1.24
parseInt ("42"); // -> 42
Égalités étranges
Du fait de la conversion, dans certains cas des valeurs de types différents peuvent être
considérées égales. Par exemple :
1 == "1" // -> true
10 != "10" // -> false
1 == "un" // -> false
0 == false // -> true
"0" == false // -> true
L’opérateur === teste à la fois le type et la valeur (négation !==).
1 === "1" // -> false
0 === false // -> false
10 === 9+1; // -> true
1 !== "1"; // -> true
Les entrées/sorties en JS sont des éléments permettant de faire entrer ou de faire sortir une
information. On peut citer entre autres :
Prompt ()
Ouvre une boîte de dialogue avec une zone de saisie et 2 bouton : OK et Annuler, rend
l’information lue.
Attention : le résultat est de type string, prévoir des conversions avec parseInt ou parseFloat si
nécessaire.
Alert ()
Confirm ()
[Link] () et [Link]()
V. Structures de contrôle
Les structures de contrôle permettent de contrôler l’exécution d’un programme en faisant des
tests sur les valeurs d’une variable. Il existe plusieurs structures de contrôle. Seuls 2 sont
présentées ici en quelque détail.
1. Structure conditionnelle
Elle se présente sous la forme suivante :
if (condition) {
séquence d’instructions si true;
}else{
séquence d’instructions si false
}
Exemple :
if (i % 2 == 0) {
return i/2;
}else {
return 3*i+1;
}
La partie else n’est pas obligatoire
false, 0, "", NaN, null, undefined valent false, tout le reste vaut true
NB :
Pour sortir brusquement d’une boucle, on utilise l’instruction break. Le mot clé break
permet de quitter une boucle avant d'avoir atteint la fin de celle-ci.
Le mot clé « continue » permet de « sauter » une itération en passant directement à la
suivante
VI. Fonctions
Le mot-clef function permet de définir une donnée de type fonction. On précise entre parenthèses
les paramètre formels, séparés par des virgules. Le corps de la fonction est noté entre accolades.
La valeur de retour d’une fonction est précisée par return. Quand ce mot n’est pas présent dans
le corps de la fonction, la fonction se comporte alors comme une procédure. Une fonction en
JavaScript doit être déclarée selon le modèle suivant :
Un appel à une fonction est donc un ordre donné au navigateur pour exécuter des lignes de codes
placées hors du bloc de code appelant. L’appel se fait de deux manières :
Soit directement en donnant le nom de la fonction et les arguments qu’elle accepte
quand la fonction ne retourne pas de valeurs
Soit en affectant le résultat de la fonction à une variable.
On appelle une fonction en précisant les paramètres effectifs entre parenthèses on peut nommer
une fonction en définissant une variable dont la valeur est de type fonction
// équivalent à :
function exemple (x, y) { // var exemple = function (x,y) {
var valeur = x+y;
return 2* valeur + 1 ;
}
//appel de la fonction
La portée ou périmètre peut être assimilée à la « région » du programme où la variable est définie
et utilisable. Il existe deux périmètres :
Global, cela signifie que la variable est définie partout dans le code JavaScript ;
Local, cela signifie que la variable est définie dans une portion de code restreinte,
généralement une fonction.
En bref, Toute définition de variable dans une fonction est locale à la fonction. Une variable
locale masque une variable globale de même nom
VII. Tableaux
Les tableaux permettent de stocker plusieurs valeurs dans une seule variable. La déclaration
d’une variable de type tableau se fait en utilisant l’instruction suivante :
var mon_tableau = new Array();
ou encore en précisant la taille du tableau
var mon_tableau = new Array(10);
ou encore en spécifiant les valeurs à insérer dans le tableau :
var mon_tableau = new Array("valeur1","valeur2", "valeur3", ...)
L’accès à un élément du tableau se fait en spécifiant l’indice (le rang) de l’élément :
mon_tableau[0]
Il est bien sûr possible de donner plusieurs dimensions à un tableau, comme en algorithmique :
var mon_tableau[10][10]
permet de définir un tableau de deux dimensions. Enfin, pour obtenir la longueur d’un tableau,
nous pouvons utiliser la propriété length :
mon_tableau.length
Nous avons vu dans les paragraphes précédents la syntaxe du langage JavaScript, et quelques-
unes de ses principales fonctions et instructions. Nous allons maintenant aborder la méthode de
programmation du navigateur lui-même. Nous allons en particulier nous intéresser à la notion
d’objets et d’évènements.
L’objet qui nous intéressera particulièrement dans la programmation JavaScript est l’objet
Window, qui modélise la fenêtre du navigateur. Les différents éléments qui peuvent composer
une page HTML sont ainsi organisés de manière hiérarchique à partir de cet objet Window.
Les objets sont automatiquement instanciés à chaque étape du fonctionnement du navigateur, par
exemple lors de l’ouverture d’une fenêtre ou de frames, la création des documents contenus dans
chaque fenêtre ou frame, et les divers éléments (formulaires, images, liens ...) contenus dans
chaque élément.
Les applications JavaScript peuvent alors dialoguer avec ces objets visuels et les manipuler. Le
programmeur peut ainsi agir sur l’état du navigateur, de ses fenêtres et des documents et des
composants qui y sont inclus.
navigator : c’est le logiciel client dont le nom est noté dans [Link]
window : l’objet de plus haut niveau créé par le navigateur, c’est sa fenêtre.
location : c’est l’objet URL de la fenêtre courante.
history : ce sont les URL précédemment visitées.
document : il s’agit du document courant, dont les propriétés sontl e titre, les couleurs
(fond, texte, lien ...), les formulaires, les images etc..
Pour accéder à un objet de la page HTML, nous pouvons utiliser l’attribut name ou mieux
encore, l’attribut id que nous aurons bien évidemment appliqués à l’ensemble de nos balises
HTML. Ainsi, l’accès à un champ du formulaire se fera par l’appel suivant :
[Link].nom_du_fomulaire.nom_du_champ
Nous voyons dans l’instruction précédente qu’il est cependant nécessaire de bien spécifier le
"chemin" du formulaire : le formulaire fait bien partie de la fenêtre (window), qui contient un
document HTML (document), qui lui-même contient un formulaire, etc ...
3. Propriétés et méthodes
Chaque élément du document HTML est donc accessible via son nom et la hiérarchie des objets
depuis le langage JavaScript. Il s’agit maintenant de pouvoir manipuler ces objets en utilisant
leurs propriétés, leurs méthodes et les évènements auxquels ils réagissent.
Nous avons vu qu’une méthode permet en programmation objet d’effectuer des actions sur
l’objet, et qu’une propriété est une de ses caractéristiques. Globalement, on peut manipuler grâce
aux propriétés, l’ensemble des attributs de chaque balise HTML. Ainsi, si l’on veut modifier la
classe CSS d’un objet de notre document, nous modifierons sa propriété classname :
[Link].mom_element.classname = "nouvelle_classe";
De la même manière, il est possible de manipuler les évènements auxquels sont liés les éléments
HTML, en utilisant leurs méthodes associées :
[Link].nom_element.methode();
Par exemple, l’envoi d’un formulaire, qui correspond à l’évènement HTML onsubmit, se fera par
l’instruction JavaScript :
[Link].nom_formulaire.submit();
Nous avons vu dans les séquences du cours HTML que les balises HTML sont associées à des
évènements auxquelles elles peuvent réagir. Ainsi, la balise <body> possède deux évènements
intrinsèques souvent utilisés, onload et onunload.
A l’intérieur de ces balises, il est donc possible d’associer du code JavaScript qui sera exécuté
lorsque l’évènement sera déclenché, soit par l’utilisateur (envoi d’un formulaire par exemple),
soit par le navigateur lui-même (chargement d’une page par exemple).
Combiné à l’utilisation des feuilles de style, les évènements et JavaScript permettent également
d’obtenir des combinaisons graphiques intéressantes. Voici une liste des principaux évènements
intrinsèques :
Exemples
1 Changement de classe d’un lien
<a href = "mon_url.html" class = "ma_classe1" onMouseover= "[Link] = ‘ma_classe2’"
onMouseout = "[Link]=’ma_classe1’">mon lien change de forme avec le passage de la
souris</a>
2 Ouverture d’une nouvelle fenêtre
[Link]("idForm").elements["pseudo"].value;
ou tout simplement
[Link]("pseudo").value;
Si on veut modifier le contenu d'un textarea dont l'attribut name vaut infos :
2. L'objet "select"
L'objet select représente une liste déroulante, et comme dans toute liste, il peut être intéressant de
savoir quel choix est sélectionné ; voyons comment procéder.
Prenons une liste dont le code HTML (qui se trouve à l'intérieur d'un formulaire) est le suivant :
<option>Choisissez</option>
<option value="h">Homme</option>
<option value="f">Femme</option>
</select>
On va ici utiliser l'évènement onChange, qui appellera la fonction quand l'utilisateur modifiera le
choix.
Ensuite, il ne nous reste plus qu'à lire la valeur value de l'option correspondante, qui se
trouve dans le tableau options
<script language="JavaScript">
Par exemple, si on a une checkbox dont le nom est "maCase", dans un formulaire dont l'id est
"idForm" :
if([Link]("idForm").[Link])
alert("La case est cochee");
else{
[Link]("idForm").[Link] = true;
alert("La case n'etait pas cochee, mais maintenant elle l'est");
}
Il est également possible d'utiliser les cases à cocher par groupe : dans ce cas,
toutes les cases du groupe auront le même nom. C'est également toujours le cas
avec les boutons radio.
Par exemple, pour recupérer la valeur du 4ème loisir, il faut faire ceci :
Exemlpe:
function verif_loisir(){
for(i=0; i<[Link]("idForm").[Link]; i++){
if([Link][i].checked){
temoin++;
}
}
if(temoin != 3){
alert("Vous devez choisir 3 loisirs !");
return false;
}
return true;
}
NB :
[Link]="[Link]
II. Exemple
<html>
<head><title></title>
<script language="JavaScript">
function verif_form(){
var temoin = 0;
if([Link] == ""){
alert("Le champ \"Nom\" est vide"); return false;
}
if([Link] == ""){
alert("Le champ \"Prénom\" est vide");
return false;
}
if([Link] == 0){
alert("Vous n’avez pas choisi votre sexe");
return false;
}
for(i=0;i<[Link];i++){
if([Link][i].checked){
++temoin;
}
}
if(temoin != 3){
alert("Vous devez choisir 3 loisirs !");
return false;
}
return true;
}
</script>
</head>
<body>
<form method="post" name="formulaire" onSubmit="return verif_form()">
Votre nom <input type="text" name="nom"><br>
Votre prénom <input type="text" name="prenom"><br>
Sexe : <select name="sexe">
<option>Choisissez</option>
<option value="h">Homme</option>
<option value="f">Femme</option>