Javascript
Javascript
com MA
…………………………………………………………………………….
2005-2006
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
1
www.phpmaroc.com MA
…………………………………………………………………………….
1 Introduction au langage JavaScript
Retour au menu
Javascript est un langage de programmation très récent, créé par les sociétés Netscape et Sun
Microsystems vers la fin de l'année 1995.
Son objectif principal : introduire de l'interactivité avec les pages HTML, et effectuer des
traitements simples sur le poste de travail de l'utilisateur.
Le moyen : introduire de petits programmes, appelés SCRIPTS, dans les pages HTML.
Jusqu'ici la programmation ne pouvait être exécutée que sur le serveur. La possibilité d'inclure
des programmes dans les pages HTML et de les exécuter directement sur le poste client est
intéressante, car elle permet de décharger le serveur de ce travail et ... d'éviter les attentes des
réponses aux requêtes adressées via le Réseau.
Le code du programme est interprété par le navigateur client (qui reçoit la page). Il ne peut
pas être exécuté indépendamment, ce qui le limite comme langage de programmation,
contrairement à JAVA (à ne pas confondre !).
C'est un langage basé sur des objets, très simple et conçu, en principe, pour des non
spécialistes.
En résumé, voici ses principales caractéristiques :
On peut placer du code JS dans une page HTML à 3 endroits et sous des formes bien
différentes.
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
2
www.phpmaroc.com MA
…………………………………………………………………………….
... code
//code : instructions, déclarations de fonctions, etc..
</SCRIPT>
</HEAD>
Ecriture générale
où
Ici on peut voir les correspondances entre les balises et les événements
Exemple
Le code HTML suivant crée un bouton de nom "bouton1", sur lequel est écrit
"Calculer".
Quand l'utilisateur appuie sur ce bouton, l'événement onClick est déclenché et la
fonction calculer() est appelée.
Son code, déclaré dans l'en-tête est alors exécuté.
<HTML>
<HEAD>
<SCRIPT language="JavaScript">
function calculer() {
....// code.....
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
3
www.phpmaroc.com MA
…………………………………………………………………………….
}
</SCRIPT>
</HEAD>
<BODY>
<FORM>
<INPUT TYPE="button" VALUE="Calculer"
onClick="calculer()">
</FORM>
</BODY>
</HTML>
Ecriture générale
L'opérateur void
Pour empêcher que le code ou la fonction appelée dans l'URL JavaScript, ne
remplace le document courant, on applique l'opérateur void, qui neutralise toute
valeur ou tout effet de retour.
Exemple
<HTML>
<HEAD>
<SCRIPT language="JavaScript">
function calculer() {
....// code.....
}
</SCRIPT>
</HEAD>
<BODY>
..........
<A HREF="JavaScript:calculer()">Pour calculer</A>
..........
</BODY>
Quelques remarques
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
4
www.phpmaroc.com MA
…………………………………………………………………………….
• Pour comprendre le code, inclure des commentaires abondants :
// pour une simple ligne de commentaires
/* .....*/ pour les encadrer sur plusieurs lignes.
• Quand on ne définit pas de fonctions, on peut inclure le code directement dans la
section <BODY>.
• On peut (depuis Netscape 3) placer le code dans un fichier spécifique d'extension .JS
:
<SCRIPT LANGAGE=JavaScript SRC=source.js>
</SCRIPT>
où source.js doit être un fichier accessible au moment de l'exécution, dans le
répertoire courant ou à une adresse URL précisée.
Un tel fichier externe permet de réutiliser le code dans de multiples pages, sans avoir
à l'inclure dans le source.
Exemple-résumé
<html>
<head>
<script>
function saluer() {
alert("Bonjour tout le monde !");
}
</script>
</head>
<body>
<H4>Exécution immédiate</H4>
<script>
alert("Bonjour tout le monde !");
</script>
<H4>Exécution sur événement onClick</H4>
<form>
<input type="button" name="Bouton1" value="Salut"
onClick="saluer()">
</form>
<H4>Exécution sur protocole javascript:</
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
5
www.phpmaroc.com MA
…………………………………………………………………………….
TP Initiation à JavaScript
Retour au menu
<script language="JavaScript">
document.writeln("<I>"+"Ceci est une partie de texte
écrite"+
" avec JavaScript"+"</I><BR>");
var now=new Date();
document.write("Aujourd'hui, nous sommes le "+now);
</script>
</body>
</html>
Ecrivez l'interprétation de ce source par le navigateur.
Ensuite, pour vérifier, appuyer sur le bouton :
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
6
www.phpmaroc.com MA
…………………………………………………………………………….
Utiliser la même interface graphique que dans l'exemple IX du cours. Il est même
recommandé de récupérer son code puis de l'adapter
Autres exercices
• Soit à vérifier l'identité (la somme des premiers entiers impairs consécutifs est
toujours le carré d'un entier )
1 + 3 + 5 + ... + (2n-1) = n²
• Construire une fonction sommeNbImpairs(n) qui calcule la somme précédente et
retourne sa valeur.
On utilisera pour cela une boucle for dans laquelle cette somme sera
progressivement calculée. Ne pas oublier d'initialiser à 0, la variable somme.
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
7
www.phpmaroc.com MA
…………………………………………………………………………….
• L'utilisateur saisira la valeur de n dans un champ de texte et appelera la fonction
sommeNbImpairs(n) en cliquant sur un bouton.
Comparer le résultat avec n²
Retour au menu
Exemple
<script>
document.write("Voici la valeur approchée à ", 1E-3,
" près de la constante e : ", 2718E-3);
document.write("<P>");
document.write("Mon <i>lycée</i> est situé en
<u>Seine-Saint-Denis</u> dans la ville d\'Epinay-sur-Seine");
</script>
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
8
www.phpmaroc.com MA
…………………………………………………………………………….
• Types de variables
On distingue 5 types de variables en JS.
Les nombres : number, les chaines : string, les booléens : boolean, les objets :
object et les fonctions : function
La fonction typeof() appliquée à une variable retourne son type.
En voici l'exécution :
string
var x ;
document.write('Voici la valeur de x : x = '+ x+ "<BR>"
);
document.write("et son type : typeof(x) = " + typeof(x)
);
En voici l'exécution :
• Attention
L'attribution implicite de type, à première vue pratique, risque d'engendrer confusion
et absence de rigueur.
Il faut s'habituer à déclarer les variables et à les initialiser (c'est-à-dire leur donner
une valeur initiale au moment de leur déclaration, ce qui fixe leur type.
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
9
www.phpmaroc.com MA
…………………………………………………………………………….
Par exemple
nomLycee = "J. Feyder" ; TauxTva = 20.6 ;
Eviter absolument ce qui suit (c'est compris par JS, mais peu recommandable !)
var x = 12.5;
document.write('Ici x est une variable "réelle" : x = '+
x+ "<BR>" );
x = "Bonjour !" ;
document.write("Maintenant x est une chaîne de
caractères : x = " + x );
En voici l'exécution :
Affectation de variables
• Mécanisme de l'affectation
variable = valeur (de l'expression, de même type)
Exemple à étudier :
En voici l'exécution :
a= 10 ; b= 15
a= 25 ; b= 15
a= 25 ; b= 40
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
10
www.phpmaroc.com MA
…………………………………………………………………………….
De façon générale les variables définies directement dans une séquence de script
(entre <script> ....</script>) ont une portée globale sur toutes les parties de script.
Exemple :
<HEAD>
<script>
var lycee="J-Feyder";
var ville="Epinay-sur-Seine";
document.write("Mon lycée est situé dans la ville
d\'"+ville+"<BR>");
var date = new Date();
</script>
</HEAD>
</BODY>
<script>
document.write("Il porte le nom du cinéaste
"+lycee+"<BR>");
document.write("Nous sommes au mois N°",date.getMonth() +
1,"<BR>");
</script>
</BODY>
En voici l'exécution :
• expressions arithmétiques : construites par opérations sur les entiers et les réels.
Principales opérations
o les 4 opérations usuelles : + , - , * , / )
o ++ (incrément) , -- (décrément)
o % (modulo ou reste par une division entière)
• expressions d'affectation (ou attribution)
o l'opérateur d'affectation : variable = expression
o autres opérateurs d'attribution : += , -= , *= , /= , %= , ++ , --
o x += 4 équivaut à x = x + 4
x ++ équivaut à x = x + 1
• expressions chaînes de caractères
o + opérateur de concaténation (mise bout à bout) de deux chaînes
o var aujourdhui = " Lundi " + 3 + " novembre" +
1997;
o document.write(aujourdhui, "<BR>" );
o += ajoute la chaîne de droite à la chaîne de gauche
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
11
www.phpmaroc.com MA
…………………………………………………………………………….
document.write(message );
o
En voici l'exécution :
Tableaux JS
Un tableau dans un langage de programmation n'a rien à voir avec un tableau HTML ou Word
!
C'est un ensemble de données, en général de même type (chaine de caractères, nombres ..),
rangées sous un même nom et distingués par un numéro.
Ce numéro, l'indice, est placé entre [ ], et caractérise un élément du tableau.
Déclaration
Exemples
Utilisation
Les éléments d'un tableau de taille dim, sont indicés à partir de 0 jusqu'à dim - 1.
Exemples à étudier :
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
12
www.phpmaroc.com MA
…………………………………………………………………………….
var mois= new Array(12); mois[0]="Janvier";
...mois[11]="Décembre";
En voici l'exécution :
• printemps
• été
• automne
• hiver
123
456
789
Propriétés
Méthodes
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
13
www.phpmaroc.com MA
…………………………………………………………………………….
• reverse() change l'ordre des éléments
• sort() trie suivant l'ordre croissant, ou suivant le modèle indiqué en paramètre
Particularités et bizarreries ..
• var tab = new Array() crée un objet vide, de type tableau, sans fixer sa dimension
• var tab= new Array("bonjour", charge_e, 1.6E-19, "C") est accepté et crée un
tableau hétéroclite de 4 éléments
• En voici l'exécution :
• On peut aussi créer un tableau directement "en extension", sans faire appel au
constructeur Array(). On liste les valeurs des éléments dans [ ... ].
Exemple : les 2 définitions suivantes sont équivalentes
En voici l'exécution :
TP Données
Retour au menu
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
14
www.phpmaroc.com MA
…………………………………………………………………………….
Ecrire la procédure echange1(a, b) qui utilise la variable c, déclarée en
variable locale
2. Voici un algorithme sans 3ème variable. Montrer qu'il procéde bien à
l'échange et écrire la procédure echange2(a, b)
a b
lire a, b 3 7
a=a+b 10 7
b=a-b 10 3
a=a-b 7 3
II. Il s'agit d'écrire une séquence d'affectation portant sur 2 variables U et Us (signifiant
valeur suivante)
valeurs initiales de (U, Us) = (a, b)
valeurs finales de (U, Us) = (b, a+b)
on aura besoin d'utiliser une variable intermédiaire temporaire T
U Us
lire a, b 3 5
................
5 8
Retour au menu
• instructions séquentielles
• instructions conditionnelles (ou alternatives)
• instructions itératives (ou répétitives)
Nous allons voir en parallèle les notations algorithmiques et leur traduction en JS.
La séquence d'instructions
Il s'agit d'une suite d'actions qui sont exécutées dans l'ordre, les unes après les autres sans
choix possibles, ni répétitions.
Séquence ou bloc d'instructions
algorithme Code JavaScript
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
15
www.phpmaroc.com MA
…………………………………………………………………………….
début {
Instruction 1 Instruction 1;
Instruction 2 Instruction 2;
............ ............
fin }
Syntaxe
Structure conditionnelle
algorithme Code JavaScript
if (condition) {
SI condition séquence 1
ALORS Séquence 1 }
SINON Séquence 2 else {
FINSI séquence 2
}
Remarques
Exemple 1-1
Les instructions conditionnelles peuvent être imbriquées : cela signifie que dans la structure
conditionnelle, séquence 1 et/ou séquence 2, peuvent elles-mêmes contenir une
stucture conditionnelle.
<SCRIPT language = "JavaScript" >
var age=0;
age=prompt("Donnez votre âge : ","");
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
16
www.phpmaroc.com MA
…………………………………………………………………………….
if ( age <= 0 )
alert("Cela n'a pas de sens !");
else
if (age <=13)
alert("Vous êtes encore bien trop jeune ...")
else
if (age <18)
alert("Désolé, vous êtes encore mineur(e)")
else
if (age <25)
alert("Vous êtes déjà majeur(e) !")
else alert("Ne vous vieillissez donc pas !");
</SCRIPT>
L'instruction for permet de répéter une séquence d'instructions tant qu'une condition est vraie;
syntaxe
1. une valeur ou expression initiale portant sur une variable entière appelée compteur.
2. une condition : tant qu'elle est vraie, la répétition est poursuivie.
3. une expression de poursuite qui consiste en la mise à jour du compteur.
Exemple 2
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
17
www.phpmaroc.com MA
…………………………………………………………………………….
Qu'obtient-on exactement à l'exécution ?
Pour vérifier, voir le corrigé exemple 2
Exemple 3
Variante
Exemple 4
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
18
www.phpmaroc.com MA
…………………………………………………………………………….
}
</SCRIPT>
L'instruction répétitive while permet de répéter une séquence d'instructions tant qu'une
expression est vraie.
syntaxe
Exemple 5
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
19
www.phpmaroc.com MA
…………………………………………………………………………….
</SCRIPT>
TP Structures de programme
Retour au menu
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
20
www.phpmaroc.com MA
…………………………………………………………………………….
Lancer d'un dé, version 1
JS ne fournit que la fonction Math.random() qui donne un nombre au hasard dans l'intervalle
[0,1[
D'autre part les fonctions Math.floor(x) et Math.round(x) fournissent respectivement la
partie entière de x c'est-à-dire l'entier immédiatement inférieur à x, et l'arrondi à l'entier le
plus proche.
Utiliser ces 3 fonctions (définies avec l'objet Math) pour construire les fonctions :
Simuler grâce à une structure répétitive FOR, l'affichage des résultats d'une série de 600
lancers d'un dé normal.
Une conjecture proposée par J. Conway vers 1950, affirme que la suite S définie par
récurrence par :
1er terme So > 0
Si Sn est pair
alors Sn+1 = Sn / 2
sinon Sn+1 = 3* Sn +1
est périodique de période 3 (avec les valeurs 1, 4, 2 ) à partir d'un certain rang.
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
21
www.phpmaroc.com MA
…………………………………………………………………………….
On rappelle que la suite de Fibonacci est définie dans N* par :
U1=1;U2=1
U n+2 = U n+1 + U n
1. Montrer que l'exercice 3 fournit la séquence d'affectation qui permet de calculer les
termes consécutifs.
2. Ecrire une séquence (ou une fonction Fibo(N)), qui calcule le nième terme N de la
suite.
3. La tester ensuite en faisant calculer et afficher les N premiers termes de cette suite.
1. Soit la suite définie par Uo = N/2 et Un+1 = (Un + N / Un) / 2 , où N est un naturel;
en admettant sa convergence, vérifier que sa limite est racine de N.
2. Dans une instruction WHILE, calculer ses termes successifs, tant que la valeur
absolue de la différence de 2 termes consécutifs dépasse 10-6, c'est-à-dire | Un+1 -
Un | > 1E-6
3. Ensuite, conclure et afficher le nombre d'itérations calculées.
<script>
var s=0
for(k=0,j=10;k<10;k++,j--) {
s +=k*j
document.write(s+"<BR>")
}
document.write("Valeur finale de s = "
+s+"<P>")
var s1=0;
for (var n=0 ; n< 1000 ; n++ )
if (n%3==0) s1 += n;
document.write("Valeur de s1 = " +
s1+"<P>");
var s2, n ;
for (n=0, s2=0 ; n< 1000 ; n=n+3 )
s2 += n;
document.write ("Valeur de s2 = " +
s2+"<P>");
var s3;
for ( n=0, s3=0 ; n< 1000; s3 += n , n=n+3
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
22
www.phpmaroc.com MA
…………………………………………………………………………….
)
;
document.write("Valeur de s3 = " +
s3+"<P>");
var s4;
for ( n=0, s4=0 ; n< 1000; n=n+3 , s4 += n
)
;
document.write("Valeur de s4 = " +
s4+"<P>");
var s5;
for ( n=0, s5=0 ; n< 1000 && s5 < 500 ; s5
+= n , n=n+3 )
;
document.write("Valeur de s5 = " + s5 +" et
arret à n = "+n);
</script>
Retour au menu
• JS n'est pas un vrai langage orienté-objet. Des concepts primordiaux ne sont pas
implémentés, notamment l'héritage. Mais il peut constituer une introduction à la
syntaxe objet.
Dans le présent chapitre, nous prendrons connaissance de quelques classes de
données prédéfinies.
Ensuite, nous étudirons les objets du navigateur, puis enfin nous apprendrons
comment définir nos propres classes d'objets en JavaScript.
• Une classe d'objets est un ensemble d'informations regroupés sous un même nom, qui
décrivent la structure et le comportement commun de ces objets.
Pour définir une classe, il faut préciser :
1. les propriétés (ou attributs) qui décrivent ses caractéristiques
Une propriété est une variable qui est attachée à un type d'objets, et qui est
contient une de ses caractéristiques.
2. les méthodes (procédures ou fonctions) qui décrivent ses comportements et
ses actions
Une méthode est une fonction qui ne s'applique qu'à une classe d'objet.
• Construction des objets
Pour obtenir un objet, appelé aussi instance de la classe, on utilise une fonction
spéciale appelée constructeur et qui porte le nom de la classe.
Un objet est alors créé par l'instruction :
var objet = new Classe();
• Utilisation des objets
Propriétés et méthodes constitutives d'une classe ne sont alors applicables qu'à un
objet de cette classe.
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
23
www.phpmaroc.com MA
…………………………………………………………………………….
objet.propriété
objet.méthode()
Elles sont définies dans JS, accompagnées de données (propriétés) et de fonctions (méthodes)
utilisables directement par le programmeur.
Nous allons parcourir ces 4 classes d'objets : Math, String, Date et Image, afin de
savoir construire des objets de ces classes et utiliser leurs propriétés et leurs méthodes.
I. Math
Les fonctions mathématiques usuelles doivent être préfixées par le nom de l'objet
Math, desquelles elles dépendent. Ce sont les "méthodes" de calcul de l'objet Math.
Par exemple :
Pour alléger les notations, on peut "factoriser" le préfixe Math dans une séquence de
calcul mathématique, comme dans l'exemple suivant :
<script>
r=10;
with (Math ) {
s = PI * pow(r , 2);
theta = PI / 3;
x = r * cos( theta );
y = r * sin( theta);
document.write("PI = ",PI, "<br>");
document.write("s = ", s,"<br> Coordonnées de M : x =
",x, " y = ",y)
}
</script>
En voici l'exécution :
PI = 3.141592653589793
s = 314.1592653589793
Coordonnées de M : x = 5.000000000000001 y = 8.660254037844385
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
24
www.phpmaroc.com MA
…………………………………………………………………………….
Conversion chaine <--> nombre (entier ou flottant)
II. String
Déclaration
var chaine = "<B>Bonjour !</B>" crée une variable nommée chaine et lui attribue :
1. le type String.
2. la valeur "Bonjour !" avec l'attribut gras
Propriétés
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
25
www.phpmaroc.com MA
…………………………………………………………………………….
Quelques fonctions (ou méthodes)
var a = 5+ "007";
var b = 5+ parseInt("007");
var c = 2+ parseFloat("1.1416");
var d=255;
document.write(" a = ", a,"<br> b = ", b,"<br> c =
", c);
for (var i=0; i<255 ; i++)
document.write("En décimal i = "+i+ " s'écrit "+
i.toString(16)+"
")
a = 5007
b = 12
c = 3.1416
En décimal d= 255 s'écrit ff
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
26
www.phpmaroc.com MA
…………………………………………………………………………….
var chaine = "informatique";
document.write("J'épelle :<br>");
for (i=0 ; i< chaine.length ; i++)
document.write (chaine.charAt(i), " - ");
J'épelle :
i-n-f-o-r-m-a-t-i-q-u-e-
La méthode chaine.split(séparateur)
o
Appliquée à un texte, elle fournit un tableau de chaines dont les éléments sont
les sous-chaines extraites suivant le séparateur.
Exemples
Chaine initiale : [email protected]
découpage suivant "@" :
tab_ch1[0] = jules.toto
tab_ch1[1] = mail.ac-creteil.fr
découpage suivant "." :
tab_ch1[0] = jules.toto
tab_ch1[1] = mail.ac-creteil.fr
III. Exercice
IV. Date
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
27
www.phpmaroc.com MA
…………………………………………………………………………….
Pour construire un objet de type Date, il faut utiliser un constructeur Date()
avec le mot-clé new
Attention, les secondes et les minutes sont notées de 0 à 59, les jours de la semaine de
0 (dimanche) à 6, les jours du mois de 1 à 31, les mois de 0 (janvier) à 11, et les
années sont décomptées depuis 1900 .
Méthodes
Exemple
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
28
www.phpmaroc.com MA
…………………………………………………………………………….
Exercice
TP Objets prédéfinis
Retour au menu
Il s'agit de signaler quand le calcul n'est pas possible, et sinon d'afficher les valeurs dans un
tableau.
"Traduire" une phrase en Javanais : pour cela, chaque lettre "a" de la phrase est remplacée par
"ava".
Par exemple "ça va ?" sera "traduit" par "çava vava ?"
Que donnera "Jean, sais-tu parler Javanais ?
Exercice 4 : StatAlphabet
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
29
www.phpmaroc.com MA
…………………………………………………………………………….
2. en déduire le nombre de secondes entre ces 2 dates
3. faire afficher le nombre de jours écoulés depuis le 1/1/2000
5 Procédures et fonctions
Retour au menu
....
• Une procédure est une suite d'instructions qui forment un tout et qui sont regroupées
sous un même nom.
Une fonction est une suite d'instructions qui calcule un résultat; celui-ci est transmis à
l'expression qui a appelé la fonction, après le mot return. A noter que l'instruction
return peut être utilisée plusieurs fois en cas de valeur retournée conditionnellement.
• De plus, procédures et fonctions peuvent admettre des paramètres.
Ce sont des variables dont les valeurs sont fixées par le programme appelant au
moment de l'exécution et qui apparaissent "formellement", sans valeur affectée au
niveau de la déclaration.
S'il n'y a pas besoin de paramètres, le nom de la fonction est suivi d'un couple de
parenthèses vides.
<HEAD>
<SCRIPT LANGUAGE=JavaScript >
Function nomProcédure(param1, param2, ...) {
séquence d'instructions;
}
Function nomFonction(param1, param2, ...) {
séquence d'instructions;
return nom_variable
}
</SCRIPT>
</HEAD>
• JS lit les fonctions présentes dans une page, lors de son ouverture, mais ne les
exécutent pas.
• Une fonction n'est exécutée qu'au moment de son appel.
• Dans l'écriture de l'appel de la fonction, il faut fournir une liste de valeurs
correspondant exactement à la liste des paramètres présents dans la déclaration.
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
30
www.phpmaroc.com MA
…………………………………………………………………………….
• Les procédures forment des instructions à part entière, tandis que les fonctions
doivent être affectées à une variable du type de retour ou incluses dans des
expressions comme document.write(...).
Exemple
• De façon générale, les paramètres formels d'une fonction ne sont connus qu'à
l'intérieur de la fonction.
De même, les variables locales, variables qui sont explicitement déclarées à
l'intérieur de la fonction.
• Conséquences :
Si la valeur d'un paramètre ou d'une variable locale est modifiée dans la fonction,
cette modification ne sera pas connue à l'extérieur de la fonction. On dit que cette
variable n'est pas visible au niveau du programme général
• Examiner l'exemple suivant : qu'obtient-on exactement à l'exécution ?
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
31
www.phpmaroc.com MA
…………………………………………………………………………….
<HEAD>
<SCRIPT LANGAGE=JavaScript >
function bonjour(nom) { // nom est un paramètre local
var ch ="Salut !"; // ch est une variable locale
document.write("au début de la fonction : Bonjour
"+nom +"<BR>");
nom = "Alain"; // on modifie le paramètre
local
document.write("à la fin de la fonction : Bonjour "+nom
+"<BR>");
}
Fonctions récursives
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
32
www.phpmaroc.com MA
…………………………………………………………………………….
L'objet Function
Dans le cas où l'on ne passe pas 2 paramètres effectifs lors de son appel, cette
fonction affiche un message d'alerte et renvoie la valeur undefined
On peut définir aussi une fonction dynamiquement, en cours d'exécution, et avec un
nombre d'arguments non précisés au départ !
• Ce nombre d'arguments variables (et non défini à la déclaration), trouve son utilité
dans le cas où ces arguments doivent être traités comme les éléments d'un tableau
function somme() {
var resultat=0 ;
for (var i=0; i < somme.arguments.length; i++)
resultat += somme.arguments[i] ;
return resultat ;
}
// quelques appels
document.write("1+2+3 = somme(1,2,3) = " +
somme(1,2,3)+"<p>");
document.write("1+2+3+ .. +10 =
somme(1,2,3,4,5,6,7,8,9,10) = "
+
somme(1,2,3,4,5,6,7,8,9,10)+"<p>");
document.write(" somme(15.4) = " + somme(15.4)+"<p>");
document.write(" somme() = " + somme()+"<p>");
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
33
www.phpmaroc.com MA
…………………………………………………………………………….
Il existe un constructeur Function(), semblable aux constructeurs Date(),
Image(), permettant de définir une nouvelle fonction, lors de l'exécution.
Syntaxe :
Exemple :
Les 2 fonctions f1 et f2 sont équivalentes :
<script>
function f1(x) {
return x*x
}
var f2 = new Function("x","return x*x")
document.write("f1(12) =" + f1(12) + "<BR>")
document.write("f2(12) =" + f2(12) + "<BR>")
</script>
Retour au menu
Présentation
Les formulaires HTML (FORMS en anglais) sont des ensembles de composants , appelés
aussi champs qui permettent à l'utilisateur d'entrer des informations, d'exprimer ses choix, de
saisir du texte ...
Bien sûr les réactions à apporter à ces informations doivent être prévues à l'avance, et donc
doivent être programmées.
Les programmes en général placés sur le serveur gérent le dialogue avec le client- utilisateur.
Le langage JavaScript, plus limité, permet l'insertion de petits programmes dans les pages
HTML, les rendant ainsi interactives. Il est ainsi possible d'effectuer des traitements à partir
des données entrées par l'utilisateur.
La balise FORM
Toute la partie formulaire de la page doit se trouver entre les marqueurs <FORM>
....</FORM>
Cette balise sert de conteneur pour accueillir les éléments ou composants du formulaire,
comme par exemple un bouton, une ligne de texte, une liste de choix ..
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
34
www.phpmaroc.com MA
…………………………………………………………………………….
Chacun de ces composants s'y trouve déclaré et créé individuellement par une balise qui
commence généralement par INPUT ou par SELECT
Voici un exemple significatif qui regroupe la plupart des catégories de composants que peut
contenir une formulaire HTML.
Chaque composant sera ensuite étudié en détail.
Un exemple complet
<H2><u><CENTER>Fiche de renseignements</CENTER></u></H2>
<FORM NAME="Fiche_inscription">
Nom : <INPUT TYPE ="text" NAME="Nom" VALUE="" >
Prénom : <INPUT TYPE ="text" NAME="Prenom" VALUE="" >
Mot de passe : < INPUT TYPE="password" NAME="Pass" SIZE=5><P>
Vous êtes en terminale S à dominante :
<INPUT TYPE="radio" NAME="option" VALUE="math"
checked>Mathématiques
<INPUT TYPE="radio" NAME="option" VALUE="pc">Physique-chimie
<INPUT TYPE="radio" NAME="option" VALUE="svt">SVT
<P>
Fiche de renseignements
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
35
www.phpmaroc.com MA
…………………………………………………………………………….
Physique
Informatique
Philosophie
Quelle est votre discipline préférée ?
Effacer Valider
Pour recommencer Pour envoyer ces informations
TP exercice 1
Champs de texte
Ligne de texte
• TYPE="text" est facultatif, car il s'agit du type de champ par défaut (si on ne
précise pas).
• NAME pour préciser le nom du champ (utile pour la programmation).
• VALUE pour donner un texte visible au champ.
• SIZE fixe la longueur visible du champ (éventuellement son contenu défile vers la
gauche).
• MAXLENGTH pour limiter le nombre de caractères pouvant être entrés dans le champ.
Exemples
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
36
www.phpmaroc.com MA
…………………………………………………………………………….
Tapez votre nom : <INPUT NAME="Nom" VALUE="toto">
toto
Tapez votre nom :
Tapez votre adresse e-mail: <INPUT NAME="e-mail"
VALUE="[email protected]" SIZE=40>
[email protected]
Tapez votre adresse e-mail:
Quelquefois on ne veut pas que le texte tapé par l'utilisateur apparaisse à l'écran.
En particulier s'il s'agit d'un mot de passe ! Pour cela, on utilise le composant dont le type est
TYPE=PASSWORD.
<INPUT TYPE="password" NAME="mot_de_passe" MAXLENGTH=taille
maximum>
Exemple
Exemple
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
37
www.phpmaroc.com MA
…………………………………………………………………………….
<TEXTAREA NAME="Demande" ROWS=8 COLS=55>
Bonjour,
J'ai une demande très importante à formuler.
J'espère que vous pourrez me dépanner ...
</TEXTAREA>
Bonjour,
J'ai une demande très importante à formuler.
J'espère que vous pourrez me dépanner ...
Liste de sélection
Pour permettre un choix dans une liste de plusieurs options présentées sous forme de liste
déroulante, on utilise la balise <SELECT>
<SELECT NAME="..." SIZE=...>
<OPTION SELECTED >option 1
<OPTION>option 2
<OPTION>option 3
</SELECT>
Exemples
seconde
première
terminale
Vous êtes inscrit(e) au lycée J-Feyder dans une classe de :
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
38
www.phpmaroc.com MA
…………………………………………………………………………….
<OPTION>olives
<OPTION SELECTED> fromage
<OPTION>épices
<OPTION>viande hachée
<OPTION>câpres
</SELECT>
anchois
tomate
olives
Que désirez vous dans votre pizza ?
Cases à cocher
Afin de répondre à des questions du type Oui/Non ou Vrai/faux, on utilise des boîtes à cocher
avec la balise :
<INPUT TYPE="CHECKBOX" NAME= "..." CHECKED>question
• <TYPE ="checkbox" > est indispensable pour produire une boite à cocher.
• NAME=".." s'il y a plusieurs boites, chacune doit avoir un nom spécifique.
• CHECKED pour cocher par défaut la boite (donc répondre Vrai par défaut).
Exemple
Déjà client ?
Demande d'une brochure.
Boutons de sélection
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
39
www.phpmaroc.com MA
…………………………………………………………………………….
Les divers paramètres
• <TYPE ="radio" > est indispensable pour produire des bouton radio.
• NAME="nom" l'ensemble des boutons doit porter le MEME nom.
• VALUE="..." chaque bouton radio doit posséder une valeur spécifique pour
différencier les options.
• CHECKED pour désigner LE bouton sélectionné par défaut.
Exemple
Vous habitez :
Epinay
Saint-Denis
Villetaneuse
Stains
Boutons de commande
Les boutons servent à recevoir des "clics". Leur principale fonction est de permettre à
l'utilisateur de déclencher des événements auxquels seront rattachées des fonctions.
Boutons communs
Boutons de validation
Ce bouton sert à valider les informations saisies dans les champs du formulaire. Il provoque
l'expédition de ces informations soit sur le serveur pour y être traitée, soit en message
électronique ou bien
<INPUT TYPE="SUBMIT" NAME= ".." VALUE="Envoyer">
Envoyer
Boutons de réinitialisation
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
40
www.phpmaroc.com MA
…………………………………………………………………………….
Ce bouton remet le formulaire dans son état initial, en réinitialisant les valeurs par défaut.
<INPUT TYPE="RESET" VALUE="Effacer>
Effacer
TP exercice 2
La balise FORM possède plusieurs attributs, permettant de spécifier ce qui doit être fait
lorsque l'utilisateur veut envoyer les données au serveur.
Attribut action
<FORM ACTION="url"...> permet d'indiquer l'URL (de protocole : http, ftp, gopher,
file, mailto, news, telnet, ...) qui va recevoir les informations entrées dans le formulaire,
lorsque l'on cliquera sur le bouton de validation.
Plus précisément, l'URL est l'adresse d'un programme (un script) qui va récupérer les données
et les traiter. Si le champ ACTION est absent, l'URL sera celle du document courant.
Attribut method
L'attribut METHOD permet d'indiquer la méthode de transmission des données saisies dans le
formulaire.
Il y en a deux:
C'est le moyen le plus simple pour faire expédier les informations du formulaire par
l'utilisateur.
Il consiste à utiliser automatiquement le courrier électronique.
Il suffit de spécifier l'adresse électronique (e-mail) du destinataire après le nom du protocole
MAILTO:
.
Si le serveur de messagerie est accessible, (si l'utilisateur est bien connecté), le corps du
message acheminé contiendra la liste des couples champ1=valeur1
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
41
www.phpmaroc.com MA
…………………………………………………………………………….
Par exemple, pour m'envoyer vos fiches de rensenseignements, il suffirait de remplacer, dans
le formulaire du début de ce chapitre, la ligne <FORM NAME="Fiche_inscription">
par
TP exercice 3
Programmation événementielle en JS
Retour au menu
Résumé
L'utilisateur déclenche un "événement" (clic, déplacement souris, clic sur un bouton, choix
d'un option de liste déroulante etc ...) relativement à un objet (lien, composant de formulaire
..).
L'événement est décelé (capté) par l'objet cible si celui-ci possède une "sensibilité" à
l'événement. Il faut donc connaitre la correspondance objet-événement.
S'il prévoit un intérêt à "répondre" à cet événement, le programmeur doit à l'avance, associer
du code JS ou une fonction JS à un tel couple objet-événement. L'appel et l'exécution de ce
code ou de cette fonction seront automatiquement déclenchés par l'événement, et constituent
ainsi la "réponse" à celui-ci.
Les fonctions sont déclarées dans la partie <HEAD> et les appels en général associés à la
balise de l'objet HTML qui va capter l'événement. Il faut veiller à bien gérer le passage de
paramétres, souvent un formulaire entier.
Evénements JS
Nous avons déjà vu des exemples d'appels de fonctions JavaScript provoquées par des
événements qui surviennent au moment de l'exécution du programme.
Ces événements sont des actions qui sont déclenchées le plus souvent par l'utilisateur.
Par exemple, un clic sur un bouton (composant de formulaire) est un événement, comme l'est
la validation d'un texte saisi dans une ligne de texte, ou le choix d'une option dans un
composant case à cocher
Le navigateur reconnait un ensemble d'événements associés à des balises, des liens et des
composants de formulaires. Par programmation, on peut leur associer des fonctions
particulières appelées gestionnaires d'événements appelée systématiquement lorsque ces
événements sont provoqués.
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
42
www.phpmaroc.com MA
…………………………………………………………………………….
2. déclenchée par l'événement correspondant (click sur un composant de type
button)
3. qui apparait dans la balise du composant qui reçoit l'événement
4. et à laquelle on affecte une fonction écrite en JS, déclarée préalablement
définition générale
Supposons déjà déclarée une fonction nommée calculer. On peut appeler le navigateur à
l'exécuter au moment où l'utilisateur clique sur un bouton.
Pour cela il suffit d'affecter cette fonction calculer avec ses paramètres, au gestionnaire
onClick qui réagit à l'événement click
Le code à écrire est : Le paramètre this.form fait référence au formulaire qui contient le
bouton lui-même.
Remarques
• onBlur : se produit quand un champ Textarea, Text ou Select n'est plus activé.
• onChange : se produit quand un champ Textarea, Text ou Select est modifié par
l'utilisateur.
• onClick : se produit quand un composant Button, Checkbox, Radio Link, Reset ou
Submit reçoit un click souris
• onFocus : se produit quand un composant Textarea, Text ou Select est activé.
• onLoad : se produit quand le navigateur a fini de charger une fenêtre ou toutes les
frames d'un FRAMESET. L'événement onLoad se positionne dans la balise BODY
ou dans la balise FRAMESET
• onMouseOver : se produit quand la souris passe sur un Hyperlien ou une zone
activable d'une image.
• onSelect se produit quand un composant Textarea ou Text est sélectionné.
• onSubmit : se produit quand un formulaire est globalement validé appui du bouton
Submit.
• onUnload :se produit quand on quitte un document. L'événement onUnload se
positionne dans la balise BODY ou dans la balise FRAMESET.
• onAbort : se produit quand l'utilisateur interrompt le chargement d'une image
• onError : se produit quand le chargement d'une page ou d'une image produit une
erreur.
• onMouseout : se produit quand la souris quitte une zone Area d'une image ou un
hyperlien.
• onReset : se produit quand on clique sur le bouton reset d'un formulaire
Tableau récapitulatif
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
43
www.phpmaroc.com MA
…………………………………………………………………………….
Gest.
provoqué par l'utilisateur qui ... sur les objets ...
événement
onBlur enlève le focus du composant text, textarea, select
change la valeur d'un texte ou d'un
onChange text, textarea, select
composant à options
button, checkbox, radio, reset,
onClick clique sur un composant ou un hyperlien
submit
onFocus donne le focus au composant text, textarea, select
onLoad charge la page dans le navigateur balises BODY, FRAMESET
balises <A HREF..>, <AREA
onMouseOut la souris quitte un lien ou une ancre
HREF..>
balises <A HREF..>, <AREA
onMouseOver bouge la souris sur un lien ou une ancre
HREF..>
onReset efface les saisies d'un formulaire bouton reset
sélectionne une zone d'édition d'un
onSelect text, textarea
formulaire
onSubmit soumet un formulaire bouton submit
onUnload quitte la page balises BODY, FRAMESET
Programmer un formulaire
Champ de TEXTE
<FORM NAME="Questions">
<INP
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
44
www.phpmaroc.com MA
…………………………………………………………………………….
2. Pour chaque composant, étudier le code JavaScript qui permet de récupérer les
données du formulaire pour un traitement spécifique.
Physique
Informatique
Philosophie
Quelle est votre discipline préférée ?
Recommencer la saisie
Valider ces informations Fermer le formulaire
Effacer
Code du formulaire
<HTML>
<HEAD>
<META NAME="Author" CONTENT="Jean Gourdin, lycée Jacques Feyder, Epinay-sur-S
<META NAME="Description" CONTENT="option info 97/98">
<SCRIPT LANGUAGE="JavaScript1.1">
var hauteur=300;
var largeur=300;
options="width="+largeur+",height="+hauteur+"toolbar=yes,
directories=no, menubar=no,scrollbars=yes,status=yes";
function traiter_info(formulaire) {
w =open("","Fiche_de_renseignements",options);
nom=formulaire.Nom.value;
prenom=formulaire.Prenom.value;
motpass=formulaire.secret.value;
discipline=formulaire.disciplines.options[formulaire.disciplines.selectedInde
for (i=0;i<formulaire.specialites.length;i++) {
if (formulaire.specialites[i].checked)
specialite=formulaire.specialites[i].value;
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
45
www.phpmaroc.com MA
…………………………………………………………………………….
}
w.document.write("<font size=+1><u><center>Fiche de
renseignements</center></u></font><p>");
w.document.write("Votre nom : ", nom,"<br>");
w.document.write("Votre prénom : ", prenom,"<br>");
w.document.write("Votre mot de passe : ", motpass,"<P>");
w.document.write("Votre spécialité de TS : ", specialite,"<br>");
w.document.write("Votre discipline favorite : ",discipline,"<P>");
w.document.write("Vous êtes inscrit(e) en : <UL>");
if (formulaire.deug.checked) w.document.write("<LI>"+formulaire.deug.value+
if (formulaire.cpge.checked) w.document.write("<LI>"+formulaire.cpge.value+
if (formulaire.iut.checked) w.document.write("<LI>"+formulaire.iut.value+"<
if (formulaire.bts.checked) w.document.write("<LI>"+formulaire.bts.value+"<
if (formulaire.autre.checked)
w.document.write("<LI>"+formulaire.autre.value+"<br>");
w.document.write("</ul>");
w.document.write("<br>");
}
function fermer(){
w.close();
}
</SCRIPT>
</HEAD>
<FORM NAME="Fiche">
Nom : <INPUT TYPE ="text" NAME="Nom" VALUE="" >
Prénom : <INPUT TYPE ="text" NAME="Prenom" VALUE="" >
Mot de passe : <INPUT TYPE="password" NAME="secret" SIZE=5>
<P>
Vous êtes en terminale S à dominante :
<INPUT TYPE="radio" NAME="specialites" VALUE="Math" checked>Mathématiques
<INPUT TYPE="radio" NAME="specialites" VALUE="PC">Physique-chimie
<INPUT TYPE="radio" NAME="specialites" VALUE="SVT">SVT
<P>
Quelle est votre discipline préférée ?
<SELECT NAME="disciplines" SIZE=3>
<OPTION>Physique
<OPTION SELECTED>Informatique
<OPTION>Philosophie
<OPTION>Mathématiques
<OPTION>Langues
<OPTION>SVT
<OPTION>Histoire
<OPTION>EPS
</SELECT>
<P>
Vous vous êtes inscrit(e)s en :<BR>
<INPUT TYPE=CHECKBOX CHECKED NAME="deug" value="Deug 1ère année">Deug 1ère an
<INPUT TYPE=CHECKBOX NAME="cpge" value="Classe préparatoire">Classe préparat
<INPUT TYPE=CHECKBOX NAME="bts" value="Section de T.S.">Section de T.S.
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
46
www.phpmaroc.com MA
…………………………………………………………………………….
<INPUT TYPE=CHECKBOX NAME="iut" value="IUT">IUT
<INPUT TYPE=CHECKBOX NAME="autre" value="Autre école">Autre école
<P>
Ecrivez ci-dessous le sujet de votre projet informatique :<BR>
<TEXTAREA NAME="Projet" ROWS=5 COLS=55>
Voici mon projet d'option informatique
</TEXTAREA>
<P>
<CENTER>
<TABLE width=90% BORDER=2>
<TR ALIGN=center>
<TD width=33%>Valider ces informations<P>;INPUT TYPE=BUTTON
VALUE="Enregistrer" onClick='traiter_info(Fiche)'>
</TD>
<TD width=33%>Recommencer la saisie<P><INPUT TYPE=RESET
VALUE="Effacer">
</TD>
<TD width=33%>Fermer le formulaire<P><INPUT TYPE=BUTTON
VALUE="Fermer" onClick='fermer()'>
</TD>
</TR>
</TABLE>
</CENTER>
</FORM>
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
47
www.phpmaroc.com MA
…………………………………………………………………………….
TP1 Evénements JavaScript
Retour au menu
<html>
<head>
<script language="JavaScript">
function lireprenom(str) {
alert("bonjour, "+ str+"!");
}
</script>
</head>
<body>
Entrez votre prénom :
<form>
<input type="text" name="exo1" value=""
onBlur="lireprenom(this.value)">
</form>
</body>
</html>
L'événement onBlur (="sur sortie du focus") est déclenché lors de la validation (ou par
action sur la touche TAB ou en cliquant en dehors du champ).
La fonction lireprenom() est alors appelée.
Son paramètre this.value prendra la valeur tapée dans le champ.
Remarque :this désigne l'objet courant; ici, this est facultatif.
Expliquez ce qu'affichera cette page.
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
48
www.phpmaroc.com MA
…………………………………………………………………………….
Exercice 3 : événements onClick sur des boutons radio et onChange sur une liste
déroulante
• Rouge
o Vert
o Bleu
o Au hasard
Des boutons radio sont liés à ces choix de couleur. Par défaut la couleur de fond du document
est rouge.
Un changement de bouton sélectionné doit provoquer immédiatement le changement de
couleur associée au bouton. Utiliser la propriété bgColor de l'objet document et lui affecter
une couleur,
par exemple document.bgColor = "red";
Exercice 4 : événements onClick sur un bouton et onChange sur une ligne de texte
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
49
www.phpmaroc.com MA
…………………………………………………………………………….
• Quand l'utilisateur passe la souris sur un hyperlien (peu importe sa nature, texte ou
image, et son effet) il doit faire afficher un message qui l'invite à cliquer sur le lien.
Ce texte disparait quand la souris quitte le lien.
• Quand il clique sur le lien, une boite de message alert() apparait.
Ecrire un programme JS pour contrôler la saisie d'un composant texte, qui doit contenir une
adresse e-mail. La chaine doit être de la forme chaine1@chaine2
Retour au menu
Exercice 1 (enquete.html)
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
50
www.phpmaroc.com MA
…………………………………………………………………………….
Vos coordonnées
nom
prénom
e-mail
établissement
ville
Seine-Saint-Denis
département Val de Marne
Seine et Marne
enseignement
éducation
administration
direction
Validation du formulaire
Annuler
Exercice 2 (exo-calcul.html)
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
51
www.phpmaroc.com MA
…………………………………………………………………………….
Test des opérateurs arithmétiques en
JS
Résultats
• On entre une expression arithmétique dans une ligne de texte nommée calcul.
(On pourra par la suite en fournir au hasard)
• L'enfant doit proposer une réponse dans le champ nommé reponse
• Prévoir un 3ème champ, nommé message, pour accueillir un message.
• Si la saisie dans reponse est vide, alors afficher dans message "Propose une
réponse", sinon comparer la réponse à la valeur (avec la fonction eval() qui évalue
une chaine de caractère).
• Le message sera suivant le cas "réponse fausse .. corrige" ou bien "bonne réponse"
• Un bouton marqué résultat devrait permettre à tout moment d'obtenir la réponse
exacte dans le champ message.
• La partie d'analyse de la réponse sera programmée dans une fonction verif()
Réponse 23
Résultat
Pour recommencer Effacer
<>
Exercice 4 (exo-nb-mysterieux.html)
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
52
www.phpmaroc.com MA
…………………………………………………………………………….
• Il s'agit de faire trouver un nombre entier nbInconnu à l'utilisateur. Ce nombre sera
obtenu au hasard, entre 0 et 100, par exemple.
• On n'accorde qu'un nombre d'essais limité maxEssai, fixé en constante au début du
programme .
• A chacun des essais dans le composant Proposition, le joueur donne un nombre
NbEssai et par appel d'une fonction provoquée par l'événement onChange, il
obtiendra dans le composant Message, « c'est plus » ou « c'est moins ».
• Deux conditions peuvent donc arrêter la répétition des essais :
1. Le joueur a découvert nbInconnu
2. OU il a épuisé le nombre total d'essais permis maxEssai
• Si le nombre inconnu a été trouvé avant le nombre maximum d'essais, le programme
affichera le message dans le composant Réponse
"Vous avez trouvé en ... essais", sinon il affichera "Le nombre à touver était : ......".
• Prévoir la possibilité pour le joueur de recommencer une partie (bouton Nouveau
jeu).
A tout moment, le joueur peut demander la réponse (bouton Réponse).
Proposition : 23
N°essai : 3
Réponse :
Exercice 5 (exo-trinome.html)
• Déclarer une fonction trinome() qui doit afficher la liste des valeurs de la fonction
f(x) =3x² - 2x -1, par défaut, pour x entier de -5 jusqu'à 5.
La fonction est donc construite à l'aide d'une itération for(var x = ....; x < .... ; x++)
• Construire dans la partie BODY, un formulaire comprenant 3 composants de type
champ de texte ( pour la saisie par l'utilisateur des valeurs des 3 coefficients a, b,
c) et un bouton Calculer qui doit déclencher l'appel de la fonction trinome()
• Lors de cet appel, on récupère les valeurs a, b, c, xm, xM saisies dans le
formulaire (il sera peut-être nécessaire de convertir ces chaines en valeurs numériques
avec parseInt ou parseFloat ).
• Améliorer le programme en appelant la fonction trinome(), à chaque changement
de l'une des 5 valeurs saisies.
Tableau de valeurs
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
53
www.phpmaroc.com MA
…………………………………………………………………………….
fonction trinôme f(x)= ax²+bx+c
f(x) = 3x²-2x-1
f( -5 ) = 84
f( -4 ) = 55
f( -3 ) = 32
f( -2 ) = 15
3 f( -1 ) = 4
a= f( 0 ) = -1
-2 f( 1) =0
b= f( 2) =7
-1 f( 3 ) = 20
c= f( 4 ) = 39
-5 f( 5 ) = 64
xmin=
5
xmax=
Retour au menu
window
|
+ --parent, frames[], self, top
|
+ --location
|
+ --history
|
+ --document
|
+ --forms[]
| |
| elements[] (text, textarea, checkbox, password
| radio, select, button, submit, reset)
+ --links[]
|
+ --images[]
|
+ --URL
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
54
www.phpmaroc.com MA
…………………………………………………………………………….
• Les objets de ces classes 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.
• Remarque
Mais attention, cette hiérarchie d'objets n'a rien à voir avec la notion d'héritage : les
objets "descendants" ne sont considérés que comme des propriétés particulière de
l'objet "ancêtre".
Ainsi, un objet document n'est pas un objet window particulier, mais une
propriété de window, qui est elle-même un objet doté de propriétés et de méthodes
...
• Objets fondamentaux
o navigator : c'est le logiciel client dont le nom est noté dans
navigator.appName
o window : l'objet de plus haut niveau créé par le navigateur, c'est sa fenêtre.
o location : c'est l'objet URL de la fenêtre courante.
o history : ce sont les URL précédemment visitées.
o document : il s'agit du document courant, dont les propriétés sontle titre, les
couleurs (fond, texte, lien ...), les formulaires, les images etc..
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
55
www.phpmaroc.com MA
…………………………………………………………………………….
On peut connaitre toutes les propriétés des objets avec une itération FOR .... IN
Par exemple pour l'objet document :
function proprietes() {
var objet;
var n=document.ppte.liste.selectedIndex;
switch (n) {
case 0: objet=navigator; break;
case 1: objet=navigator.plugins; break;
case 2: objet=navigator.mimeTypes; break;
case 3: objet=window; break;
case 4: objet=window.location; break;
case 5: objet=window.history; break;
case 6: objet=window.document; break;
case 7: objet=document.forms[0]; break;
case 8: objet=document.forms[0].elements; break;
case 9: objet=document.images; break;
case 10: objet=document.links; break;
case 11: objet=forms[0].liste.options; break;
}
var nom=document.ppte.liste.options[n].text;
fen=open("","Proprietes","width=600,height=250,toolbar=yes,
directories=no, menubar=no,scrollbars=yes,status=yes");
fen.focus();
var texte = "";
for (var i in objet )
texte +=nom+"."+i+" = " +objet[i] +"
";
fen.document.write(texte);
fen.document.close();
}
Pour tester, choisir dans la liste OU appuyer sur ce bouton
navigator
La classe navigator
Cette classe ne contient qu'un seul objet, appelé navigator, qui est créé au démarrage du
logiciel.
Voici l'ensemble de ses propriétés, avec leur valeur, pour le navigateur actuel.
navigator.userAgent = Mozilla/4.7 [fr] (Win95; I)
informations générales envoyées au serveur HTTP à
chaque requête du navigateur
navigator.appCodeName = Mozilla
nom de code
navigator.appVersion = 4.7 [fr] (Win95; I)
informations sur la plate-forme d'exécution
navigator.appName = Netscape
navigator.language = fr
navigator.platform = Win32
type de machine
navigator.securityPolicy = France policy
navigator.plugins = [object PluginArray]
tableau des plug-ins installés
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
56
www.phpmaroc.com MA
…………………………………………………………………………….
navigator.mimeTypes = [object MimeTypeArray]
tableau des types mimes (voir
Edition/préférences/navigator/applications
Exemples d'utilisation
Retour au menu
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
57
www.phpmaroc.com MA
…………………………………………………………………………….
Attention !
L'objet window courant sera fermé, c'est-à-dire le navigateur lui-même !
B. Méthode setTimeOut()
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
58
www.phpmaroc.com MA
…………………………………………………………………………….
Simulation d'une montre digitale (exo-fenetre4)
Exemple de réalisation :
Projet : QCM
C. Fenêtres d'informations
Il s'agit d'afficher des informations (texte, image) associé à un mot, une phrase, une
image, une zone ... dans une nouvelle fenêtre
Lorsque l'utilisateur passe la souris sur des zones particulières d'une image en
coordonnées, ou d'un texte, une fenêtre surgit avec un texte descriptif ou une image,
adapté à la zone pointée.
Ceci est réalisé par un script qui réagit aux événements onMouseOver et
onMouseOut, en respectivement ouvrant et fermant la fenêtre d'information. On
pourra au choix utiliser une image (cartes de France, du métro, plan de l'académie, du
93) ou cette page où est déjà préparée une image en coordonnées d'un pc
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
59
www.phpmaroc.com MA
…………………………………………………………………………….
Le choix par l'utilisateur d'une option dans une liste, produit un événement de type
onChange qui, en réaction, affiche un document ou une image dans une nouvelle
fenêtre.
ouvrir
Choisissez :
fermer
o Construire une liste déroulante (objet <select>) dont les items sont les url
de quelques moteurs de recherche.
o La sélection d'un item de la liste doit :
vérifier si la fenêtre fen est ouverte, alors l'ouvrir
charger le document, situé à l'url choisi, et l'afficher
o On pourra compléter avec une autre liste déroulante ou une série de boutons
radios, pour sélectionner des sites disciplinaires.
Altavista HTML
La classe document
Retour au menu
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
60
www.phpmaroc.com MA
…………………………………………………………………………….
formulaires inclus dans le document.
En voici la liste, et les balises correspondantes :
Un exemple concret
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
61
www.phpmaroc.com MA
…………………………………………………………………………….
Dans cet objet-window, cet objet-document posséde en tout 2 images, un lien et un formulaire
contenant 2 champs de texte et un bouton
Le contenu saisi dans le 2ème champ de texte peut être obtenu par :
var mail = document.forms[0].elements[1].value ou
var mail = document.formu.nom.value;
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
62
www.phpmaroc.com MA
…………………………………………………………………………….
Principales propriétés
Principales méthodes
• write(ch1, ch2, ..) affiche les chaines ou des arguments traduits en chaines.
• open() crée un nouveau document, ne pas confondre avec la création d'une fenêtre !
• close() ferme le document, impossible d'y ajouter alors du texte.
• getSelection() donne le texte sélectionné
Retour au menu
Rappels HTML
L'objet Image
Il fait partie des objets (ou plutôt des classes d'objets) prédéfinies du langage (à partir de la
version 1.2). Contrairement à l'usage de la balise IMG, on peut précharger l'image et la
stocker en cache (mémoire+disque) dans un objet de type Image, avant de l'afficher.
Contructeur Image()
Il s'agit d'une fonction spéciale sans paramètre qui sert à créer un objet.
var monImage = new Image()
Propriétés
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
63
www.phpmaroc.com MA
…………………………………………………………………………….
• Elles correspondent aux attributs de la balise <IMG>
name, src, lowsrc, height, width, border, hspace, vspace
..
• La propriété la plus importante, src permet de charger le fichier image à partir d'une
URL et de le stocker dans l'objet.
• var monImage = new Image();
• monImage.src = "moi.jpg";
• Mais l'image n'est pas affichée. Elle pourra l'être dans une balise <IMG>
<IMG SRC=...>
• De plus, malheureusement, les propriétés height et width ne sont pas
modifiables
Méthodes
Evénements onMouse
Soit une hyper-image nommée img (une image qui sert d'ancre à un lien interne ou externe).
Lorsque l'utilisateur promène sa souris sur une telle image, il provoque un événement
onMouseOver qui doit changer la source de l'image.
Lorsqu'il la quitte, l'événement onMouseOut est provoqué et l'image permanente sera de
nouveau affichée
Solution proposée
<BODY>
<A HREF="javascript:void(0)"
onMouseOver="img.src='../images/connect.gif'
"
onMouseOut="img.src='../images/creteil.gif'
">
<IMG NAME="img" WIDTH=60 HEIGHT=61
BORDER=0
SRC="../images/creteil.gif"></A>
..........
</BODY>
Version améliorée
Voici une solution plus générale et satisfaisante, qui consiste à charger d'abord les images
dans un tableau d'images, dès l'affichage du document.
<SCRIPT>
var commentaire=new Array(2);
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
64
www.phpmaroc.com MA
…………………………………………………………………………….
var images=new Array(2);
function init() {
commentaire[0]="Et voici mon chat jeune .."
commentaire[1]="C'est moi en pleine action .."
for (var i=0 ; i <images.length; i++)
images[i]= new Image();
images[0].src="../../images/monchat.gif"
images[1].src="../../images/etmoi.jpg"
}
function changimage(n) {
document.image.src=images[n].src;
status=commentaire[n];
}
</SCRIPT>
<BODY onLoad="init()">
<H2>Evénements onMouseover et onMouseout sur un lien-
image</H2>
<A HREF="javascript:void(0)"
// return true est obligatoire, pourquoi ?
onMouseOver="changimage(1); return true";
onMouseOut="changimage(0)">
<IMG NAME="image" width=640 height=480
SRC="../../images/monchat.gif">
</A>
Solution proposée
<script langage="JavaScript1.2">
var tab_image = new Array(5);
for (var i=0; i< tab_image.length;i++)
tab_image[i]= new Image();
tab_image[0].src='../images/dalhias.jpg'; Evénements onClick sur un
tab_image[1].src='../images/eglantines.jpg'; lien-image
tab_image[2].src='../images/roses rouges.jpg';
tab_image[3].src='../images/roses jaunes.jpg';
tab_image[4].src='../images/chrysanthemes.jpg';
var n=0;
function change() {
n= ++n;
if (n == tab_image.length) n=0;
window.document.image.src=tab_image[n].src;
}
</script> Cliquer pour changer d'image
</HEAD>
<BODY>
<H4>Evénements onClick sur un lien-image</H4>
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
65
www.phpmaroc.com MA
…………………………………………………………………………….
<A HREF="JavaScript:change()">
<IMG NAME="image" WIDTH=200 HEIGHT=150
SRC="../images/fleurs1.jpg">
Cliquer pour changer d'image
</A>
Description
Ici le changement d'image n'est pas lié au déclenchement d'un événement provoqué par
l'utilisateur (onMouseOver ci-dessus), mais est automatiquement démarré au chargement
de l'image initiale par la balise IMG, grâce à l'événement onLoad qui appelle la fonction
anime().
Celle-ci se charge de changer la valeur de la propriété src donc de provoquer aussitôt
l'affichage d'une autre image.
Plus précisément :
Exemple de code
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
d = 100 ;
n = 0 ;
var im = new Array(10) ;
function init(){
for (var i=0; i<im.length;i++){
im[i] = new Image();
im[i].src= "../images/"+i+".gif" ; Exemple de réalisation
}
}
function anime() {
document.monImage.src= im[n].src ;
n++;
if (n == im.length) n=0;
}
</SCRIPT>
</HEAD>
<BODY onLoad="init()">
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
66
www.phpmaroc.com MA
…………………………………………………………………………….
TP manipulation d'images (objet Image)
Retour au menu
Exercice 1
Choisir une série d'images de même taille (à peu près) et réaliser la "version améliorée" du
cours, en utilisant un appel de fonction pour changer d'images.
L'image chargée par défaut à l'affichage de la page, peut être remplacée par l'image
sélectionnée dans la liste.
Par exemple
Choisissez :
Les 3 images ont été insérées dans le document par leur balise <IMG SRC="...">.
On dispose alors d'un tableau des 3 images de fleurs, manipulables sous les noms
images[i], i=0,1,2
En réaffectant la propriété src de l'image images[i], on peut remplacer l’image actuelle.
L'événement onClick sur un bouton doit appeler la fonction permuter(), qui effectuera
une permutation circulaire des 3 images.
Situation initiale
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
67
www.phpmaroc.com MA
…………………………………………………………………………….
Voici un exemple :
Programmation multi-cadres
Retour au menu
Rappels HTML
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
68
www.phpmaroc.com MA
…………………………………………………………………………….
• La balise <FRAMESET> est une directive de partage de la fenêtre initiale du
navigateur en sous-fenêtres
• Les documents Elle remplace la balise <BODY>
• Chaque balise décrivant chaque "frame", cadre est <FRAME>
• Chaque document est décrit par
Un exemple
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
69
www.phpmaroc.com MA
…………………………………………………………………………….
2. <FRAME .. >
Petit exemple :
code représentation
<- extrait document principal
-> avant activation
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
70
www.phpmaroc.com MA
…………………………………………………………………………….
<PRE>
<font size=-1>
Cliquez vite
dans le cadre
au dessus,
pour admirer ...
</font>
</PRE>
L'objet frames[]
• On sait que l'objet documents posséde une propriété-tableau links[] qui rassemble
tous les liens du document.
Sa propriété target correspond à l'attribut target de la balise <A HREF=url ..>
• Exemples
o Envoyer le document référencé par le lien dans le cadre nommé cadre_haut
document.links[1].target = "cadre_haut"
o Afficher le document (ou l'image) dans la fenetre nommée maFenetre
window.fen = open("c-frames.html","maFenetre",
options);
document.links[0].target = "maFenetre";
TP Programmation multi-cadres
Retour au menu
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
71
www.phpmaroc.com MA
…………………………………………………………………………….
Exercice 1 (exo-messages-cadres.html)
Exercice 2 (exo-famille-cadres.html)
• Remarquer qu'il y a 3 cadres dans la page mais hiérarchisés. Ils ne sont pas de même
niveau. Alfred et Jules sont frères, Tom est leur oncle.
• Créer la page f3.html avec le FRAMESET constitué des 2 cadres f4 et f5 et
contenant respectivement f4.html et f5.html.
• Créer ensuite la page f1.html avec le FRAMESET constitué des cadres f2 et
f3 contenant respectivement f2.html et f3.html.
• Dans chacun des 3 cadres, écrire une phrase indiquant quelle est la personne
concernée. Ex : " ici Jules, frère d'Alfred et neveu de Tom ".
• Puis, dans chacun des 3 cadres ajouter un formulaire contenant une zone de texte
nommée " message".
• On coisit de se positionner dans la situation de Jules. Jules va envoyer un message à
son frère, un autre à son oncle et un à lui-même. Pour cela compléter le formulaire de
Jules par 3 boutons correspondant aux 3 messages à transmettre.
• Le gestionnaire d'événement onClick de chaque bouton devra effectuer l'envoi
dans la zone de texte du cadre correspondant. Par exemple, le click sur le bouton
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
72
www.phpmaroc.com MA
…………………………………………………………………………….
"écrire à mon frère" enverra le message "salut Alfred, ici ton frère jules" dans la zone
de texte message du cadre d'Alfred.
Exercice 3 (exo-cadres-couleurs.html)
1. afficher des couleurs de fond aléatoires dans ces cadres, toutes les secondes
2. afficher au hasard une image ou rien dans les 9 cadres, toutes les 3 secondes.
Exercice 4 (exo-cadres-images.html)
Il s'agit de choisir à la fois une image et le cadre où elle doit être affichée
Où voulez vous
afficher
les images ?
Choisissez
d'abord le lieu
:
• en haut
• en bas
Ensuite l'image
:
• image de mon
chat
• un plan de
métro
• un plan du
93
• des roses
Pour
recommencer
Exercice 5 (exo-visionner-images)
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
73
www.phpmaroc.com MA
…………………………………………………………………………….
Exercice 6 (changer-images-cadre)
Il s'agit de construire un menu simple basé sur des changements d'images suivant la rubrique
pointée par la souris.
On dispose des 5 images zone1.gif ... zone5.gif qu'on chargera dans un tableau à
l'affichage de la page.
Quelques projets
• metaChercheur
Il s'agit de simuler le travail d'un méta-chercheur. Un ou plusieurs mots-clés sont
choisis et une chaine de requête conforme à la syntaxe de chaque moteur leur est
adressé.
• Simulation de devis
Exemple : devis proposé par la société MicroHard
• QCM, tests ..
Exemple : entrainement au calcul mental
Programmation objet en JS
Retour au menu
Introduction
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
74
www.phpmaroc.com MA
…………………………………………………………………………….
objets, on dit des instances de ces classes. En revanche, on ne peut pas créer d'objet
de la classe Math
• Après avoir étudié ces objets prédéfinis et gérés par le langage lui-même, nous allons
construire nos propres objets.
Si la syntaxe et le vocabulaire sont proches de la programmtion-objet, JS n'est pas un
langage orienté objet car il n'en admet pas les principaux concepts comme l'héritage,
le polymorphisme ...
• Les objets JS sont surtout utilisés pour créer des structures de données plus
complexes et plus souples que les tableaux de variables.
L'émiettement des données relatives à une personne dans de nombreux tableaux complique
les traitements et apparait artificiel : que représente au fond le tableau des années de naissance
? et l'unité d'une personne tient au choix du même numéro d'indice dans tous les tableaux !
Dans la conception objet, la personne redevient le centre des préoccupations. On en fait une
description générale dans la déclaration d'une classe d'objets, qui se compose de 2 parties qui
décrivent ses propriétés et ses actions.
Exemple élémentaire
// Exemple d'utilisation
document.write("largeur = "+ rect1.largeur)
document.write("longueur = "+ rect2.longueur)
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
75
www.phpmaroc.com MA
…………………………………………………………………………….
// utilisation de la méthode
var a2 = rect2.aire())
document.write("L'aire du rectangle rect1 = "+rect1.aire() );
On choisit tout d'abord un nom identifiant la classe de l'objet, souvent commençant par une
majuscule. Par exemple Personne, Voiture, Maison, Article ...
Les éléments de ces classes autrement dit les objets, seront identifiés en minuscules
Propriétés
Puis, les noms des propriétés (ou variables d'objet) qui décrivent les caractéristiques stables
des objets, même si les valeurs de ces propriétés changent.
Ainsi pour Personne, les propriétés retenues peuvent être nommées : nom, prenom,
adresse, codePostal, ville, numTel, annee_naissance, solde ...
A tout moment un objet, c'est-à-dire une personne particulière, possède une valeur pour
chaque propriété, valeur qui peut varier au cours du temps, comme son adresse ou le solde de
son compte bancaire.
Méthodes
A coté de ces caractéristiques, les méthodes de l'objet décrivent son comportement, plus
précisément les traitements auquels tout objet est soumis.
Par exemple, une personne peut calculer son âge, déménager, changer de N° de téléphone,
avoir son compte crédité ou débité ...et avoir un nouveau-né !
Le plus souvent, ces méthodes d'objet agissent sur les propriétés et en modifient les valeurs.
Elles sont donc décrites par du code de fonction, intégré à la définition de l'objet.
Constructeur d'objets
En JS, la classe d'un objet est complètement décrite par une (seule) fonction particulière
appelée constructeur de l'objet
La classe de l'objet et son constructeur portent le même nom.
Son écriture va contenir 2 parties : les déclarations des propriétés et des méthodes.
Schéma de constructeur
Le mot this, comme dans tous les langages orientés objets, permet de référencer les futurs
objets de la classe.
//constructeur de la classe
function nom-classe(param1, param2 ...) {
// déclaration et initialisation des propriétés
this.propriété1 = param1 ;
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
76
www.phpmaroc.com MA
…………………………………………………………………………….
this.propriété2 = param2 ;
........
// affectation des méthodes
this.méthode1 = fonction1 ;
........
}
Construction d'objets
La classe d'objets étant décrite dans la fonction constructeur (plus les fonctions annexes, pour
les méthodes de l'objet), comment l'utiliser ?
On doit distinguer 2 étapes :
Cette classe est une sorte de modèle selon lequel on va pouvoir créer des objets concrets,
manipulables.
Ces objets concrets _ exemplaires tirés du modèle_ s'appellent les instances de la classe.
Pour créer une telle instance, on effectue un appel à l'aide de l'opérateur new au constructeur
de l'objet, et on affecte le résultat à un identificateur de variable.
(Remarque : newa déjà été utilisé dans ce rôle pour créer des objets du type Date, Array.. )
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
77
www.phpmaroc.com MA
…………………………………………………………………………….
Ecriture générale
var instance1 = new nom-classe(liste de valeurs)
Les valeurs passées en paramètre vont affecter les propriétés de l'instance (et ainsi les
initialiser), conformément au code du constructeur : ils doivent donc correspondre
exactement, en place et en nombre, aux paramètres formels du constructeur.
Mais on peut alternativement appeler le constructeur par défaut, sans paramètre, reportant à
plus tard l'initialisation des propriétés.
Prolongements
I. Tableau d'objets
Le type tableau en JS admet tout type d'éléments. On peut donc remplir un tableau de
Personne
var personnes = new Array (N);
for (var i=0; i<personnes.length; i++)
personnes[i] = new Personne();
personnes[0].nom = "Toto";
.......
Pour connaitre les propriétés/méthodes d'un objet, on peut utiliser une fonction qui
parcourera toutes ses propriétés, comme nous l'avons déjà fait pour les objets
prédéfinis window, document ..
<SCRIPT LANGUAGE="JavaScript">
function proprietes(objet,nom) {
var texte = "";
for (var i in objet )
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
78
www.phpmaroc.com MA
…………………………………………………………………………….
texte +=nom+"."+i+" = " +objet[i] +"
";
document.write(texte)
}
// parcours des propriétés des instances de Personne
for (var i=0; i<personnes.length; i++)
proprietes(personnes[i], personnes[i].nom)
</SCRIPT>
Exemple
Soit une classe Voiture dotée des propriétés suivantes :
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
79
www.phpmaroc.com MA
…………………………………………………………………………….
// Par cette construction, la propriété proprietaire
devient une instance de Personne !
var auto = new Voiture('Renault','Clio',1997, toto);
V. La propriété prototype
Cette propriété spéciale s'applique à une classe déjà construite et permet de lui ajouter
de nouvelles propriétés et méthodes
On peut effectuer ces ajouts sur des classes prédéfinies ou définies par le
programmeur
Il faudra ensuite attribuer une valeur à cette propriété, car on ne dispose pas d'un
constructeur d'objet qui l'intégre. Syntaxe
nomClasse.prototype.nomPropriété = valeurInitiale ;
Exemples
<SCRIPT>
// ajout d'une méthode à la classe String
function fin() {
return this.charAt(this.length-1);
}
String.prototype.fin = fin ;
</SCRIPT>
</HEAD>
<BODY>
<SCRIPT>
var ch1 = "Bonjour à tous"
var ch2 = "et à demain !"
document.write("Le dernier caractère de "+ "\""+ ch1+
"\"" + " : "+ch1.fin()+"<br>");
document.write("Le dernier caractère de "+ "\""+ ch2+
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
80
www.phpmaroc.com MA
…………………………………………………………………………….
"\"" + " : "+ch2.fin()+"<br>");
</SCRIPT>
</BODY>
TP Programmation-objet en JS
Retour au menu
1. Il s'agit de définir une classe Employe pour simuler l'enregistrement d'une personne
salarié dans une entreprise.
2. Déclarer un constructeur de Entreprise avec les propriétés nom, ville, etc .. et
une méthode presenteToi().
A enregistrer sous le nom entreprise.js
3. Puis écrire un constructeur de Employe pourvu des propriétés : entreprise,
personne ("un employé est une personne"), fonction, salaire, anciennete, et une
méthode presenteToi().
A enregistrer sous le nom employe.js
4. Ecrire baseEntreprise.js et baseEmploye.js, dans lesquels on définit des
tableaux entreprises et employes
5. Ecrire afficheEmploye.html qui importe les 4 fichiers précédents, ainsi que
personne.js et basePersonne.js et répond à quelques questions :
1. quelles sont les entreprises ?
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
81
www.phpmaroc.com MA
…………………………………………………………………………….
2. quelles sont les personnes ?
3. Les employé(e) se présentent
4. Quelle est la personne employé(e) numéro 1 ?
5. Quelle est l'entreprise de employé(e) numéro 2 ?
Projet
Retour au menu
Observations
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
82
www.phpmaroc.com MA
…………………………………………………………………………….
• "accepter uniquement les cookies quiseront renvoyés à leur serveur d'origine"
• "M'avertir avant d'accepter un cookie"
Durant la session Web, chaque cookie est conservé en mémoire, il y a écriture sur disque à la
fermeture du navigateur. L'écriture s'effectue sur instruction du serveur utilisant la directive
HTTP suivante (incluse dans l'en-tête)
Set-Cookie
nom=valeur; [expires =date; path= chemin-client; domain=
nom-domaine; secure]
Ecrire un cookie
function CompterLesPassages () {
// fonction pour mettre en évidence le cookie
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
83
www.phpmaroc.com MA
…………………………………………………………………………….
n = RechercherLeCookie("CompterPassageCoursCookie");
opts="width=200,height=20,,screenX=400,screenY=10"
fen = open("", "Delicious_Cookies",opts);
fen.document.write("Page chargée "+ n + " fois !<P>
Vous reprendrez bien un de ces délicieux cookies ...");
fen.document.close();
id=setTimeout("fen.close();MiseAJourCookie (n);",2000);
}
Supprimer un cookie
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
84
www.phpmaroc.com MA
…………………………………………………………………………….
Pour supprimer le cookie -->
Exercice
www.phpmaroc.com
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
85