JavaScript
JavaScript
Chapitre 1 1
1 Tour d'horizon .................................................................1
1.1 Introduction .................................................................................1
1.1.1 Historique ..........................................................................2
1.1.2 Survol rapide du langage.................................................2
1.2 Un mot sur les entrées/sorties ..................................................2
1.3 Les variables et les données .....................................................2
1.4 Les types primitifs ......................................................................3
1.4.1 Types booléen, nombre et chaîne...................................3
1.4.2 Nombres particuliers, types null et indéfini...................3
1.5 Les tableaux ................................................................................3
1.6 Commentaires et fin d’instructions ..........................................3
1.6.1 Les commentaires ............................................................3
1.6.2 Fin d’une instruction ........................................................4
1.7 Expressions et tests conditionnels ..........................................4
1.7.1 Les opérateurs numériques ............................................4
1.7.2 Les opérateurs booléens .................................................5
1.7.3 Les opérateurs sur chaînes de caractères ....................5
1.7.4 L'opérateur conditionnel..................................................5
1.7.5 Les opérateurs d'affectation............................................5
1.7.6 L' opérateur de séquencement........................................6
1.7.7 Précédence des opérateurs.............................................6
1.7.8 L’opérateur Typeof ...........................................................6
1.8 Contrôle de flux...........................................................................6
1.8.1 Les blocs d'instructions : { instruction ... instruction } 7
1.8.2 L'instruction conditionnelle : if (condition) Statement1
else Statement2...........................................................................7
1.8.3 Boucle For : for(initialisation; rebouclage;
mise_a_jour) statement..............................................................7
1.8.4 Boucle while : while(condition) statement.....................8
1.8.5 L’instruction continue ......................................................8
1.8.6 L’instruction break ...........................................................9
1.8.7 Les fonctions : function nom(paramètres){corps}........9
1.8.8 Quelques notions sur la récursivité .............................10
Chapitre 1
1 Tour d'horizon
1.1 Introduction
Sous ce nom, certes trompeur, se cache un langage qui n'a rien à voir
avec le langage Java. Certains vous diront que JavaScript c'est du light,
que Java c'est pour les pros et que JavaScript pour les débutants. En fait,
JavaScript est un langage, Java en est un autre, chacun ayant ses propres
objectifs et s'adressant tous deux à des programmeurs. Par contre, les
bases de JavaScript reposent sur un autre langage de script : ECMAScript
(bien que historiquement, ce soit l'inverse). Aujourd'hui, toutes
implémentations de JavaScript se doit de respecter la spécification de
ECMAScript (ECMA-262). Les raisons en sont simples : JavaScript
trouvera sa place aussi bien du coté des serveurs WEB, que du coté des
clients (les navigateurs). Les objectifs n'étant naturellement pas les
mêmes, il fut nécessaire de définir un noyau minimal, pouvant être utilisé
dans toutes les situations.
A l'heure actuelle, ce langage est utilisé comme complément au langage
HTML, pour tout ce qui relève du traitement dynamique, c'est-à-dire de
tout ce qui ne peut être résolu qu'au niveau du navigateur (et non du
serveur). En effet, le code JavaScript, embarqué avec le code, ne sera
traité que par le navigateur recevant le document. Il est aussi utilisé dans
un autre cadre : l'administration des serveurs (dans ce cas des possibilités
d'utiliser les entrées/sorties et les accès au WEB sont possibles).
Ainsi, grâce à JavaScript, vous pourrez changer le contenu d'une image,
selon que vous soyez dans une zone de la fenêtre du navigateur ou dans
une autre, afficher des boîtes de dialogue dans telle ou telle situation,
contrôler la validité des données d'un formulaire contrôler l'historique des
pages déjà visitées et une multitude d'autres choses.
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 1
Tour d'horizon
var nouvelle_valeur;
1.1.2 Survol rapide du langage. var cout = null;
var nouveau_prix = 10.95;
adresse = « 23 Petite Rue »;
Les principales caractéristiques de ce langage sont les suivantes : var resultat = ‘Resultat inconnue’;
• quelques types de base : les nombres (pas de distinctions
resultat = true;
resultat = 1.08e+23;
apparentes entre entiers et flottants), les chaînes de caractères, resultat = 0x2Fe3;
les booléens, le type référence nulle. resultat = 0377;
• langage faiblement typé : une variable peut à tout moment nom = Jimmy Zed ;
var premier = 1, second = 2, dernier = 10;
changer de type.
• syntaxe proche de celle du langage C : quasiment les mêmes La déclaration des variables se fait par le mot clé var. Le type de la
opérateurs, les mêmes instructions. variable, lui, n'importe pas : une variable peut à un instant être d'un type,
• le langage est basé sur un modèle objets rudimentaire : il n'y a pas puis à l'instant suivant être d'un autre type. Le type de la variable est
de notion de classe, pas d'héritage. déterminé par l'affectation .
• quelques objets de bases : manipulation de dates, de tableaux,
calcul mathématiques. var toto="Coucou"; // toto est de type chaîne de caractères.
• pas de possibilités d'utiliser les entrées/sorties (sauf pour le clavier var toto=10; // toto prend maintenant le type nombre.
var tata; // tata est une variable dont le type n'a
et l'écran), du moins du point de vue des clients. Pas d'accès au // pas encore été spécifié
réseau non plus, du moins du point de vue des clients.
1.4.2 Nombres particuliers, types null et indéfini 1.6 Commentaires et fin d’instructions
JavaScript reconnaît trois nombres particuliers dont les valeurs Infinity, - Une fois les données stockées, il faut être capable de leur appliquer des
Infinity et NaN. De même, il existe deux types particuliers appelés Null et traitements.
Undefined.
1.6.1 Les commentaires
1.5 Les tableaux
Commenter un programme, c'est lui adjoindre des annotations non
var totaux_mensuels = new Array(12);
significatives pour son exécution. Malgré tout, ils ont une utilités certaines
totaux_mensuels[3] = 1999.95; lorsque, après quelques temps vous relisez votre programme. En effet un
totaux_mensuels[4] = 'Pas de ventes'; programme, c'est bien plus que des mots mis côte à côte : chaque mot
possède une sémantique (un sens). Il en résulte un comportement précis
var a=4;
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 3
Tour d'horizon
lors de l'exécution, et il n'est pas forcement aisé de saisir ce comportement result = 5; result = 20; // on change la valeur de result
// juste pour voir...
dès la première lecture du code source. Les commentaires sont donc là
pour vous faciliter cette tâche. Pour ce qui est de la syntaxe, vous avez result
deux possibilités héritées des langages = 19; // la valeur finale de result est 19.
if ( result == 15 )
{
. En voici une brève description. /* Cet texte ne sera pas affiché puisque result ne
vaut pas 15 */
Mettre en commentaire la fin d'une ligne Clib.puts('La valeur de result est ')
Clib.puts('encore 15')
}
Cette solution, la plus simple, consiste à placer deux fois consécutivement else
le caractère divise ('/'), souvent nommé slash. Tout ce qui suit, sur la ligne, {
/* En fait, ce texte sera affiché puisque result ne
ces deux caractères est alors considéré comme un commentaire. Faites vaut pas 15 ! */
attention à ne pas vouloir placer un commentaire alors que vous êtes en Clib.puts('La valeur de result a été ');
train de définir une chaîne de caractères : votre annotation serait alors Clib.puts('modifiée et ne vaut plus 15');
incluse dans la chaîne. }
/* fin de l’exemple */
;
var maVariable = 3 + 2 // un petit commentaire
// Pas de commentaires dans la ligne suivante
var taVariable = "toto // tata";
Mettre un commentaire sur plusieurs lignes
1.7 Expressions et tests conditionnels
Cette deuxième solution devient utile quand le commentaire à placer
devient important : il est alors difficile de le mettre sur une seule ligne. Une expression est soit une valeur (15, 16.25, mais aussi "chaîne", ...),
Pour marquez le début du commentaire, placer les deux caractères soit le contenu d'une variable, soit le résultat d'une opération. Dans les
suivants (consécutivement) '/*'. Inscrivez ensuite votre annotation, puis deux premiers cas, rien de plus n'est à rajouter. Dans le dernier cas, le
replacez les deux caractères précédent dans l'ordre inverse ('*/') pour calcul peut être assez complexe : une opération étant constituée d'un
terminer votre commentaire. opérateur qui prend en compte un certain nombre de sous-expressions
(pouvant elles-mêmes être composées). Tous ces opérateurs admettent
/************************************ un ordre de priorité assurant une évaluation correcte de l'expression.
*** Ceci est aussi un commentaire *** Cependant si vous voulez être sûr de l'ordre d'évaluation des
************************************/ composantes de cette expression, ou si vous voulez fixer un autre l'ordre,
il vous est possible des parenthèser les sous-expressions composants
l'expression globale. Nous allons donc faire un petit tour des opérateurs
1.6.2 Fin d’une instruction qui sont à votre disposition.
(%). On trouve aussi des opérateurs qui agissent bit à bit : le ET (&), le OU opérande, une valeur de type numérique ou booléenne. Dans ce dernier
(|), le XOR (^), le décalage à gauche (<<), vers la droite (>>). On trouve cas, c'est la chaîne de caractères décrivant la valeur qui est concaténée :
aussi des opérateurs numériques acceptant uniquement comme ex "34" pour le nombre 34 ou "true" pour une valeur booléenne qui serait
opérande, une variable numérique. On trouve notamment la fonction vraie.
d'incrémentation (++) et celle de décrémentation (--) : dans les deux cas,
l'opérateur peut être soit préfixé (l'incrémentation de la variable se fait
avant l'évaluation de l'expression), soit postfixé (dans ce cas c'est un peu 1.7.4 L'opérateur conditionnel
plus fin, on évalue d'abord, l'expression globale, puis ensuite on
incrémentera la variable). Voici une expression numérique dont toutes les L'opérateur que nous allons maintenant décrire sert à retourner une
sous-expressions sont de type numérique : on remarquera l'utilisation des expression ou une autre selon qu'une troisième (servant d'expression de
parenthèses pour forcer l'ordre d'évaluation des sous-expressions. test) soit vraie ou fausse. Cet opérateur est donc ternaire (il accepte trois
opérandes, ici trois expressions). Il est donc logique d'avoir choisi deux
// une expression numérique
(b*b+9*p/q)/(4*c) caractères de séparation : '?' pour séparer la première de la seconde et ':'
pour séparer la seconde de la dernière. Pour vous éclairer un petit peu
plus, regardez les exemples qui suivent.
que l'on peut écrire a=b=c=10 : dans ce cas c reçoit 10, puis b reçoit le + -
<< >>
contenu de c (soit 10), puis a reçoit le contenu de b (soit toujours 10). Ce == != < <= > >=
que l'on peut trouver de plus dans les langages issus de C, ce sont les &
affectations combinées. C'est-à-dire qu'on effectue d'abord un calcul entre ^
le contenu de la variable, décrite par l'opérande gauche, et celle de droite, |
&&
puis on affecte le résultat du calcul à la variable. On a notamment les ||
opérateurs suivants : += -= *= /= %= &= |= ^= <<= >>=. Pour mieux ?:
comprendre ce qui se passe regardez les équivalences suivantes. = += -= *= /= %= <<= >>= &= ^= |=
,
a+=10 <=> a=a+10
b<<=10 <=> b=b<<10
// Vous trouverez de suite les autres équivalences.
1.7.8 L’opérateur Typeof
Dernière remarque, l'opérateur '+=' est bien entendu aussi défini sur les
chaînes de caractères. Typeof est utilisé pour identifier le type d’un élément. Etant donnée une
variable ou une expression, il renvoie une chaîne de caractères décrivant
son type :
1.7.6 L' opérateur de séquencement var a = 'n_importe_quoi';
var b;
Il peut être utile de diviser le calcul d'une expression en plusieurs sous- document.write(typeof(a)); // affiche "string"
document.write(typeof(b)); // affiche "undefined"
expressions. Mais supposons qu'on ne puisse exécuter qu'une seule document.write(typeof(c)); // affiche "undefined"
expression à l'endroit clé (par exemple la sous-expression test d'une
expression conditionnelle). Dans ce cas vous pouvez utiliser l'opérateur de
séparation d'expression. La valeur de l'expression globale est celle de
1.8 Contrôle de flux
l'évaluation de la dernière expression. Regardez l'exemple suivant.
var a; Pour ceux qui connaissent déjà les langages, cette partie risque de ne pas
var b; être des plus intéressantes (la syntaxe et la sémantique restent très
var Result = (a+=x,b=y*z,a*b==3?variable1:variable2);
similaires). Quant aux autres, ils vont pouvoir s'apercevoir que ce n'est pas
si compliqué qu'il pourrait y paraître.
La première règle : de syntaxe (que nous avons déjà évoquée) est très
simple : toute instruction se termine par un point-virgule (;), et ce même s'il
1.7.7 Précédence des opérateurs
s'agit de la dernière instruction d'un bloc (certains autres langages
permettent à ce moment là de l'omettre). Le point-virgule joue le rôle
Enfin, je pense qu'il est nécessaire de signaler qu'il n'est pas utile de d'opérateur de séquencement d'instructions.
parenthéser vos expressions à tous vents. Des règles de priorité existent : Seconde règle : toute expression est aussi une instruction. Ainsi
utilisez-les! Pour information, voici un petit tableau rappelant la priorité des l'instruction suivante est valide et calcul une valeur qui est finalement
opérateurs : ceux qui sont sur une même ligne sont de priorité identique, oubliée : "3*a+4*b;". Si vous cherchez une raison à ce choix, pensez qu'il
ceux du haut étant plus prioritaires que ceux du bas. vous faudra bien affecter des valeurs à des variables (or l'affectations est
[ ] .
! ++ -- une expression ...), et n'oubliez pas qu'un programme s'écrit avec des
* / % instructions.
Page 6 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
Tour d'horizon
peuvent donc ne pas apparaître. Dans ce cas là, si la condition n'est pas
remplie, aucune action ne sera générée, et l'exécution du programme
1.8.1 Les blocs d'instructions : { instruction ... instruction } passera à l'instruction qui suit le if :
if ( x == 5 ) // premier exemple
Les blocs d'instructions sont très utiles : en effet on peut être amené à y = 6;
certains moments à faire un traitement qui nécessite plusieurs instructions.
Or la syntaxe de certaines instructions de contrôle ne permettrait pas de if ( name == "fred") // second exemple
y = 6;
faire la distinction entre ce qui rentre dans le cadre du traitement et ce qui else
succède le traitement. L'introduction des blocs d'instructions solutionne le y = 7;
problème. La syntaxe utilisée est relativement simple : on introduit un bloc
par une accolade ouvrante, on fait suivre toutes les instructions qui sont if ( x == y && a == b ) // troisième exemple
{
nécessaires (sans oublier un point-virgule à la fin de chacune d'entre elles) x++;
puis on termine le bloc par une accolade fermante. Pour la suite de ce y++;
chapitre, nous définissons un Statement (mot anglais) comme étant soit }
une instruction de base, soit un bloc d'instructions. else
{
a++;
// Ce qui suit est un bloc de trois instructions b++;
{ }
a=2*i+4; // première
for (var i=0;i<a;i++) fonction(i); // seconde (composée)
while(i>0) { fonction2(); i--; } // troisième
} 1.8.3 Boucle For : for(initialisation; rebouclage; mise_a_jour)
statement
1.8.4 Boucle while : while(condition) statement Cette instruction s'utilise uniquement à l'intérieur d'une structure de boucle
et permet de sortir du statement, et ce sans terminer le traitement en
Cette instruction réalise aussi une boucle. En fait, la boucle while peut être cours, et de reprendre un nouveau tour de boucle. Ceci peut être utile, par
vue comme une boucle for à laquelle on aurait enlevé les expressions exemple, pour avorter un traitement selon qu'une condition soit remplie ou
initialisation et mise_a_jour (et réciproquement). Seule l'expression dite de non. L'exemple qui suit sera peut être plus explicite que mes explications.
condition, reste utilisable. La boucle while et donc plus générale que celle
obtenue par l'instruction for. L'exemple qui suit réalise la même chose que for(var i=1;i<11;i++){
if (i==6) continue; // Si i=6 alors on ne fait pas de
l'exemple précédent afin de vous faire sentir les différentes subtilités qu'il traitement
peut y avoir entre les deux versions de la boucle en JavaScript. // mais on continue les autres étapes !!!
AppelFonction(); // On appelle une fonction
// Voici un petit exemple d'utilisation du while }
var b=0;
var i=1; // On crée un variable utile pour la boucle // il résulte que cette boucle fait seulement 9 appels à la
while(i<10) { // tant que celle-ci est inferieure à 10 // fonction, car le sixième a été oublié
b+=i; // on fait une partie du calcul
i++; // on augmente la variable de boucle d'une unité ________________________________________
}
// la somme des 9 premiers entiers vaut : b var loop = 0; // Exemple 1. Affiche les premiers multiples de
7.
Page 8 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
Tour d'horizon
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 9
Tour d'horizon
// la somme des 9 premiers entiers vaut : Sigma9() for ( boucle = arguments.length-1; boucle >=0; boucle--)
somme += arguments[boucle];
return somme;
}
Considérons maintenant que l'on veuille généraliser la fonction pour qu'elle
puisse calculer la somme des i premiers entiers (ou i est une valeur que // Maintenant, servons-nous de ces fonctions
vous fixez à l'appel de la fonction selon vos besoins). Dans ce cas la
valeur i doit être passée en paramètres. Voici le code résultant. dire_bonjour();
var reponse = ajouter(5, 3);
document.write( reponse + ' ' + ajouter(10, 4) );
// Voici notre petite fonction document.write( ' ' + ajouter_tous(1, 3, 5, 7, 9) );
function Sigma(i){
var b=0; Qui produira l’affichage :
while(i>0) b+=i, i--; Bonjour. Bienvenue dans la fonction Dire_Bonjour(). 8 14 25
return b;
}
... // Plein de lignes de codes Et encore un :
// la somme des 10 premiers entiers vaut : Sigma(10)
var truc = 'dehors';
Pour information, s'il vous prenait l'idée de vouloir définir une fonction à
function magie()
l'intérieur d'une fonction, sachez que la spécification actuelle de JavaScript {
ne le permet pas. Malgré tout, l'interprète de Netscape accepte ce genre var truc = 'dedans';
de choses. Dernière petite remarque, de manière générale, les définitions document.write(truc);
de fonctions se font dans le couple de marques HTML }
<HEAD> ... </HEAD> document.write(truc); // affiche ‘dehors’
, par l'utilisation des marques magie(); // affiche ‘dedans’
<SCRIPT> ... </SCRIPT>
. Mais ceci n'est qu'une convention, vous pouvez très bien ne pas la
respecter.
1.8.8 Quelques notions sur la récursivité
Un autre exemple :
Comme tout bon langage qui se respecte, JavaScript permet de
function dire_bonjour() programmer des fonctions dites récursives. Derrière ce mot barbare se
{
document.write('Bonjour. '); cache une méthode de programmation qui, dans bien des cas, permet de
document.write('Bienvenue dans la fonction dire_bonjour(). résoudre plus simplement le problème (ceci sous-entend que vous ayez
'); bien assimilé le processus).
return;
}
On dit qu'il y a un appel récursif dans une fonction, si celle-ci se fait appel
pour calculer une sous-partie du problème. Il y a aussi récursivité si la
function ajouter(premier, second) fonction s'appelle indirectement (c'est-à-dire qu'elle fait appel à une
{ fonction qui fera, peut-être elle-aussi indirectement, appel à la fonction de
var resultat = premier + second;
return resultat; départ). Dans tous les cas, lors de l'exécution de la fonction à un niveau
} de profondeur donné d'appel, il n'y aura pas écrasement des valeurs des
variables (car le passage des paramètres se fait par recopie des valeurs).
function ajouter_tous() Pour y voir plus clair regardez le programme suivant. Je pense que vous
{
var boucle=0, somme=0; aurez deviné qu'il va faire la somme des i premiers entiers (comment avez-
Page 10 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
Tour d'horizon
... // Plein de lignes de codes La première ligne permet de créer un objet nommé chose. Pour rendre cet
objet utile, il faut lui adjoindre des propriétés. Les lignes 3 à 5 montrent à
// la somme des 10 premiers entiers vaut : Sigma(10)
quel point il est simple de le faire :
Nom_de_variable_objet.nom_de_propriété = valeur;
// Une fonction qui calcule un factoriel !!!
function Factoriel(i){ Les objets peuvent posséder autant de propriété qu’on veut du moment
return i<=1?1:i*Factoriel(i-1);
} que l’on donne un nom différent pour chacune.
function affichage_de_bonjour_standard() {
1.9.1 Qu’est-ce qu’un objet ? document.write("Bonjour."); }
function affichage_special_du_nom()
D’une manière générale, il s’agit du regroupement d’un certain nombre de {
variables et fonctions à l’intérieur d’un ensemble organisé qui pourra document.write("Mon nom est : " + this.nom);
}
facilement être réutilisé. var chose = new Object;
Les défenseurs d’autres langages orientés objets risquent de ne pas chose.nom = "Fred";
apprécier cette définition simpliste des objets, mais comme JavaScript chose.dire_bonjour = affichage_de_bonjour_standard;
n’impose pas une grande rigueur dans l’écriture des scripts, il s’adapte chose.afficher_nom = affichage_special_du_nom;
parfaitement à la définition d’objets simples. chose.dire_bonjour();
Voici un exemple d’objet JavaScript : chose.afficher_nom();
var chose = new Object; Les deux fonctions définies dans l’exemple sont apparemment normales,
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 11
Tour d'horizon
function afficher()
{
Un exemple :
document.write(this.nom);
} for (prop in objet_quelconque)
{
function Employe(nom, age) if (typeof(objet_quelconque[prop])== « chaine »)
{ document.write(« Propriété : »+prop+« Valeur : »
this.nom = nom;
this.age = age; +objet_quelconque[prop]) ;
this.status = 'Plein temps'; }
}
Cet exemple parcours toutes les propriétés d’un objet quelconque et
Employe.prototype.adresse = 'JS Industries, Station St.';
Employe.prototype.contact = '012 345 6789';
affiche uniquement les propriétés contenant une valeur de type chaîne.
Employe.prototype.job = "Semble indispensable";
Employe.prototype.affiche = afficher;
Page 12 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
Tour d'horizon
Nous avons vu que chaque variable faisait partie d’un objet que nous
pourrions appeler contexte courant, objet courant ou portée courante.
Parfois, pour faciliter l’écriture d’un script, nous pouvons essayer de
changer la portée courante. L’utilisation de with le permet. Sa syntaxe est
la suivante :
with (objet)
instruction ou bloc d’instructions
Un exemple :
with ( nom_incroyablement_long.seule_propriete )
{
document.write( un + ', ' + deux + ', ' + trois +'!');
// A vos marques, prets, partez !
}
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 13
Tour d'horizon
Page 14 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
JavaScript et les Navigateurs
Chapitre 2
JavaScript peut être implanté dans une page HTML de deux façons :
par la balise SCRIPT directement, ou en mettant le code dans un fichier
séparé, en utilisant les événements.
<HTML>
<HEAD>
<SCRIPT>
var step=1;
// exemple 1.
</SCRIPT>
// exemple 2.
<SCRIPT LANGUAGE="JavaScript"> step=2; </SCRIPT>
// exemple 3.
<SCRIPT LANGUAGE="JavaScript1.1"> step=3; </SCRIPT>
// exemple 4.
<SCRIPT LANGUAGE="JavaScript1.2"> step=4; </SCRIPT>
// exemple 5.
<SCRIPT SRC="mesfonctions.js"> </SCRIPT>
</HEAD>
</HTML>
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 15
JavaScript et les Navigateurs
<SCRIPT LANGAGE="JavaScript">
Une autre astuce, pour connaître le numéro de version de JavaScript est
code donnée par le programme suivant :
</SCRIPT>
<HTML><HEAD>
<SCRIPT LANGUAGE="JavaScript">var v = 1.0</SCRIPT>
On le voit, le choix du langage ne se limite pas à JavaScript et reste ouvert <SCRIPT LANGUAGE="JavaScript1.1">v = 1.1</SCRIPT>
à d'autres langages comme Visual Basic, que supporte Internet Explorer. <SCRIPT LANGUAGE="JavaScript1.2">v = 1.2</SCRIPT>
Le code placé à l'intérieur d'un couple de balises SCRIPT est évalué après </HEAD><BODY><SCRIPT>
le chargement de la page. document.write(v);
</SCRIPT></BODY></HTML>
Les fonctions sont définies dans les couples de balises SCRIPT dans la
partie entête (HEAD) de la page HTML ou même dans le corps de la page,
Le couple de balises <NOSCRIPT> </NOSCRIPT> permettent d'encadrer
ce qui n'est cependant pas conseillé.
le texte qui sera affiché si JavaScript n'est pas compris par le navigateur.
La balise SCRIPT peut prendre un argument : LANGAGE="JavaScript1.1"
qui indique que le code JavaScript est de version 1.1, actuellement <HTML><BODY><SCRIPT>
compris par les versions de Netscape 3.x et supérieure et par les versions alert("Ouvrir la page JavaScript ?");
Microsoft Internet Explorer 4 et supérieures. document.location.href = 'js_top.htm';
L'argument LANGAGE="JavaScript1.2" indique que le code JAVASCRIPT </SCRIPT>
<NOSCRIPT>Offrez-vous un vrai navigateur !</NOSCRIPT>
est de version 1.2, actuellement compris par les versions de Netscape 4.x </BODY></HTML>
et supérieure.
Pour utiliser dans une page un code JavaScript à la fois compatible 1.0 et Pour cacher le contenu d’une section SCRIPT pour un navigateur ancien
1.1 il suffit de déclarer les procédures deux fois comme le montre ou non compatible, on utilise la mise en commentaire suivante :
l'exemple suivant :
<HTML>
<SCRIPT LANGUAGE="JavaScript"> <HEAD>
code <TITLE>Notre premier script</TITLE>
</SCRIPT> <SCRIPT LANGUAGE="JavaScript">
<SCRIPT LANGUAGE="JavaScript1.1"> <!--masque le script aux navigateurs anciens
</SCRIPT> // Nous n’avons pas de fonctions ou de variables à déclarer,
Ceci peut être obtenu également par l'astuce suivante // mais il aurait fallu les placer ici...
// fin du masque destiné aux navigateurs anciens -->
<SCRIPT LANGUAGE="JavaScript1.1"> </SCRIPT>
location.replace("URL de la page HTML version 1.1") </HEAD>
code compatible 1.0 <BODY>
</SCRIPT> <SCRIPT LANGUAGE="JavaScript">
<!--masque le script aux navigateurs anciens
document.write('Bonjour le monde !<BR>');
Ceci peut se décliner par des variantes du style // fin du masque destiné aux navigateurs anciens -->
</SCRIPT>
<SCRIPT LANGUAGE="JavaScript"> </BODY>
if (navigator.userAgent.indexOf("3.0") != -1) </HTML>
Page 16 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
JavaScript et les Navigateurs
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 17
JavaScript et les Navigateurs
</SCRIPT></HEAD>
<BODY>
Page hurlante. Remplissez un champ, puis appuyez sur la touche
TABULATION.<BR>
<SCRIPT>
document.crieur[1].onchange=crier;
document.crieur.trois.onchange=crier;
</SCRIPT></BODY></HTML>
En fait, on peut remarquer que le premier INPUT prend la valeur « PLUS
L’exemple précédent donne l’affichage suivant après le remplissage du FORT ! ! ! »dèq que l’on quitte l’objet et que son contenu à changé.
deuxieme cri : Ensuite, pour les deux autres INPUT, leur événement onChange fait que
lorsque l’on quitte l’objet après avoir changer sont contenu, une boite de
message apparaît avec comme texte le contenu de l’objet INPUT que l’on
vient de quitter :
Page 18 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
JavaScript et les Navigateurs
Voici deux exemples de scripts JavaScript :
<HTML>
Ceci n’est pas très orthodoxe, mais tout à fait supporté par les navigateurs.
<HEAD> D’une manière générale, il est préférable d’utiliser les balises SCRIPT
<SCRIPT> dans la partie HEAD d’un document HTML pour toutes les déclarations.
function meteo()
{
if ( !Math.random ) // n’existe pas dans Navigator 2.0
{ 2.4 Les entités JavaScript
document.write('<PRE> -- le temps est perturbé par la
pluie --</PRE>');
} Un nom entité, en HTML, est un élément syntaxique de la forme
else if ( Math.floor((Math.random()*2)) == 0 ) &NomEntité; , qui permet de représenter des caractères difficiles à
{
document.write("<STRONG>C’est simplement symboliser. C’est ainsi que l’on représente un espace insécable par
épouvantable.</STRONG>\n");  , le caractère « < » par <, et le caractère accentué « é par
} é .Les entités JavaScript sont des extensions de cette syntaxe, qui
else se présente sous la forme &{VariableJavaScript}; ou
{
document.write("<EM> C’est merveilleux ! </EM>\n"); &{ExpressionJavaScript}; .Par exemple :
}
} <HTML><HEAD>
</SCRIPT> <SCRIPT>
</HEAD> var pixels_par_unite = 25.4;
<BODY> var total_unites = 8;
<P>Prévisions météo pour la journée:</P> </SCRIPT>
<SCRIPT> </HEAD><BODY>
meteo(); // ajout de choses
spéciales
</SCRIPT>
Graphique sous forme de barre représentant le nombre d’unités :<BR>
<P>Fin des prévisions.</P>
</BODY> <HR ALIGN=LEFT SIZE=10 WIDTH="&{pixels_par_unite *
</HTML> total_unites};"><BR>
Dans cet exemple, une fonction meteo est déclarée. Ensuite, un appel à Graphique sous forme de barre représentant le nombre d’unités sous
cette fonction est fait dans le déroulement de la page HTML. forme d’un pourcentage de la largeur totale de la fenêtre du navigateur
Dans l’exemple suivant, on crée une page complète, à l’aide d’un script (100% pour 10 unités) :<BR>
JavaScript :
<HR ALIGN=LEFT SIZE=10 WIDTH="&{total_unites * 10};%">
</BODY></HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<SCRIPT>
with ( document )
{
write('<HTML><HEAD>\n');
2.5 Les URL JavaScript
write('<TITLE>Pratiquement tout en JavaScript !</TITLE>\n');
write('</HEAD><BODY>\n');
write('Qui a besoin d’HTML statique ?\n');
Les URL JavaScript fonctionne comme tout autre type d’URL, de ce fait,
write('<BR><HR></BODY></HTML>'); on précise le type de lien : javascript:script .En voici un exemple :
}
</SCRIPT> <HTML><BODY>
<SCRIPT>
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 19
JavaScript et les Navigateurs
var resultat_test = "Le résultat de votre test est : " + 23 + <LINK REL=STYLESHEET TYPE="text/JavaScript" HREF="fancystyle"
"%"; TITLE="Fancy">
var petit = "#define x_width 1\n#define x_height 1\nstatic char L’utilisation des balises <STYLE> montre que la création de feuilles de
x_bits[] = {0x00};";
styles dans JavaScript consiste à créer des propriétés correctement
</SCRIPT> nommées et de leur affecter des valeurs réalistes. Les lettres en
majuscules P et B correspondent respectivement au marqueurs <P> et
<A HREF="javascript:resultat_test">Cliquez ici pour voir vos <B>.
résultats</A><BR>
<A HREF="javascript:ameliore_resultat()">Cliquez ici pour La balise <LINK> dans l’en-tête du document HTML a pour but d’identifier
améliorer vos résultats</A> de manière générale le relation de dépendance de ce document avec
<IMG SRC="javascript:petit" NAME='Image bitmap simple'> d’autres documents. L’une de ces dépendances possibles est une feuille
de style JavaScript, si bien que cette balise procure une alternative à
</BODY></HTML>
l’incorporation d’une feuille de styles directement dans le document.
Ainsi Il existe quelques fonctions JavaScript destinées spécifiquement aux
JSSS :
<A HREF="javascript:history.go(0)">cliquer pour rafraîchir</A>
placé dans le fichier « javascri4.htm », aura la même action <HTML><HEAD>
que : <STYLE TYPE="text/JavaScript">
<A HREF="javascri4.htm"> tags.H1.color = 'pink';
LIENHYPERTEXTE "javascr4.htm" // positionne les marges haute, droite, bas, gauche.
cliquer pour rafraîchir tags.H1.margins(1,2,3,4);
</A> tags.H1.rgb(50,50,50);
sans pour autant forcer à spécifier le nom de la page.
Ceci peut être étendu à une syntaxe du type : contextual(tags.H1, tags.B).fontStyle = "italic";
<A HREF="javascript:history.go(-1)">aller à la page
précédente</A> function changer()
{
if ( color == 'pink' ) fontStyle = "medium";
}
Exemple : La méthode margins() permet de définir les marges d’un seul coup.
La fonction contextual(), permet à un style de dépendre d’un autre. Ici, si
<HTML><HEAD>
<STYLE TYPE="text/JavaScript">
un élément <B> est imbriqué dans un élément <H1>, alors il doit être
tags.P.borderWidth = 100; affiché en italique.
tags.P.borderStyle = 'none';// sinon on a une très large Enfin, la propriété apply de la balise <I> est affecté sur le fonction
bordure changer().
tags.B.color = "red";
</STYLE>
Page 20 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
Fenêtres et Frames
Chapitre 3
3 Fenêtres et Frames
Les fenêtres et frames du navigateurs sont structurés autour de l’objet
navigateur et de l’objet document.
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 21
Fenêtres et Frames
top
Page 22 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
Fenêtres et Frames
L'utilisation la plus fréquente des frames est d'utiliser une d'entre elle pour Créer des nouvelles fenêtres de navigateur est un aspect important de
afficher un menu, et l'autre, pour parcourir le site. Tout d'abord, nous JavaScript. Vous pouvez aussi bien chargé un nouveau document (par
avons besoin d'un document qui crée les frames : exemple un document HTML) dans la nouvelle fenêtre ou bien vous
pouvez créer un nouveau document (à la volée). Nous commencerons par
<html>
<frameset rows="80%,20%">
regarder comment nous pouvons ouvrir une nouvelle fenêtre, charger une
<frame src="start.html" name="main"> page HTML dans cette fenêtre et enfin fermer cette fenêtre. Ensuite, nous
<frame src="menu.html" name="menu"> verrons comment créer un document à la volée.
</frameset>
</html>
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 23
Fenêtres et Frames
La page bla.htm est chargée dans la nouvelle fenêtre grâce à la méthode scrollbars yes|no
open(). status yes|no
toolbar yes|no
Vous pouvez contrôler l'apparence de la nouvelle fenêtre. Par exemple,, width nombre en pixels
vous pouvez décider si la nouvelle fenêtre aura ou non une barre de
status, des barres d'outils ou bien encore une barre de menu. En plus, D'autres propriétés ont été rajoutées avec JavaScript 1.2 (Netscape
vous pouvez aussi spécifier la taille de la nouvelle fenêtre. Le script Navigator 4.0). Voici ces propriétés :
suivant ouvre une nouvelle fenêtre qui aura pour taille 400x300. Cette
fenêtre aura ni barre de status, ni barre d'outils, ni barre de menu.. alwaysLowered yes|no
alwaysRaised yes|no
<html>
<head> dependent yes|no
<script language="JavaScript"> hotkeys yes|no
<!-- caché innerWidth nombre en pixels (remplace width)
function openWin2() { innerHeight nombre en pixels (remplace
myWin= open("bla.htm", "displayWindow", height)
"width=400,height=300,status=no,toolbar=no,menubar=no"); outerWidth nombre en pixels
}
outerHeight nombre en pixels
// --> screenX position en pixels
</script> screenY position en pixels
</head>
<body>
titlebar yes|no
z-lock yes|no
<form>
<input type="button" value="Ouvre une nouvelle fenêtre"
onClick="openWin2()">
Avec ces propriétés, vous pouvez maintenant définir à quelle position une
</form> fenêtre doit s'ouvrir.
</body>
</html>
3.2.2 Le nom d'une fenêtre
Comme vous pouvez le constatez, nous spécifions les propriétés dans la
chaîne de caractères Comme vous avez pu le voir, nous avons utilisez trois arguments pour
"width=400,height=300,status=no,toolbar=no,menubar=no". ouvrir une fenêtre :
Remarque : vous ne devez pas utiliser d'espaces à l'intérieur de la chaîne
myWin= open("bla.htm", "displayWindow",
! "width=400,height=300,status=no,toolbar=no,menubar=no");
Voici une liste des propriétés qu'une fenêtre peut avoir :
A quoi sert le second argument ? C'est le nom de la fenêtre. En utilisant la
directories yes|no propriété TARGET, si vous connaissez le nom d'une fenêtre existante,
height nombre en pixels vous pouvez charger un document dans celle-ci avec :
location yes|no
menubar yes|no <a href="bla.html" target="displayWindow">
resizable yes|no
Page 24 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
Fenêtres et Frames
Ici, vous avez besoin du nom de la fenêtre (si elle n'existe pas, une Nous arrivons maintenant à un aspect très intéressant de JavaScript :
nouvelle fenêtre sera créer avec ce code). Notez bien que myWin n'est créer des documents à la volée. Cela signifie que vous pouvez utilisez vos
pas le nom de la fenêtre, vous pouvez juste accéder à cette fenêtre en codes JavaScript pour créer de nouvelles pages HTML. Par ailleurs, vous
utilisant cette variable, qui est donc accessible qu'à l'intérieur du script où pouvez créer d'autres types de documents comme des scènes VRML, etc.
elle est défini. Le nom de la fenêtre (ici displayWindow) est un nom unique Vous pouvez créer ces documents dans une autre fenêtre, ou bien dans
qui peut être utilisé par toutes les fenêtre de navigateur existantes. une frame.
Tout d'abord, nous allons créer un document HTML qui sera affiché dans
une nouvelle fenêtre. Voici ce document :
3.2.3 Fermeture de fenêtres
<html>
<head>
Vous pouvez fermer des fenêtres en utilisant JavaScript. Pour cela vous <script language="JavaScript">
disposez de la méthode close(). Ouvrons une nouvelle fenêtre comme vu <!-- caché
précédemment, et dans cette fenêtre, chargeons le document suivant : function openWin3() {
myWin= open("", "displayWindow",
<html> "width=500,height=400,status=yes,toolbar=yes,menubar=yes");
<script language="JavaScript">
<!-- caché // ouvre document pour ajouter du code
myWin.document.open();
function closeIt() {
close(); // crée le document
} myWin.document.write("<html><head><title>A la volée");
myWin.document.write("</title></head><body>");
// --> myWin.document.write("<center><font size=+3>");
</script> myWin.document.write("Ce document HTML a été créé ");
myWin.document.write("avec l'aide de JavaScript!");
<center> myWin.document.write("</font></center>");
<form> myWin.document.write("</body></html>");
<input type=button value="Fermer la fenêtre" onClick="closeIt()">
</form> // ferme le document - (pas la fenêtre!)
</center> myWin.document.close();
}
</html>
// -->
Si vous cliquez sur le bouton de la nouvelle fenêtre, la fenêtre se ferme. </script>
</head>
Open() et close() sont des méthodes de l'objet window. Normallement, <body>
nous devrions écrire window.open() et window.close() au lieu de open() et
close(). C'est vrai, mais l'objet window est une exception, vous n'avez pas <form>
à écrire window pour appeler une méthode de l'objet window (ceci est vrai <input type=button value="A la volée" onClick="openWin3()">
</form>
uniquement pour cet objet).
</body>
</html>
3.2.4 Créer des documents à la volée
Regardons la fonction openWin3(). Vous pouvez voir que nous
commençons par ouvrir une nouvelle fenêtre. Comme vous pouvez le
constatez, le premier argument est une chaîne de carctères vide (""), ce
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 25
Fenêtres et Frames
qui signifie que l'on ne spécifie pas d'URL. Le navigateur ne va pas aller 3.3 Les fenêtres popup
chercher un document existant, JavaScript va en créer un.
Nous définissons la variable myWin. Grâce à cette variable, nous pouvons
Trois types de fenêtres popup sont utilisables par JavaScript. Elles
accéder à la nouvelle fenêtre. Notez que nous ne pouvons pas utilisez le
peuvent êtres instanciées par les méthodes de l’objet window et ont pour
nom de la fenêtre (displayWindow) pour cette tâche. Après avoir ouvert la
nom : alert, confirm et prompt.
fenêtre, nous devons ouvrir le document. Ceci est fait avec :
// crée le document
myWin.document.write("<html><head><title>A la volée");
myWin.document.write("</title></head><body>");
myWin.document.write("<center><font size=+3>"); 3.3.2 Une boite de confirmation :
myWin.document.write("Ce document HTML a été créé ");
myWin.document.write("avec l'aide de JavaScript!");
myWin.document.write("</font></center>");
myWin.document.write("</body></html>");
Comme vous pouvez le constatez, nous écrivons des tags HTML dans le
document. Nous créons du code HTML !
Une fois le document terminé, il ne nous reste plus qu'à fermer le
document. Ceci est fait à l'aide de :
Comme je l'ai dit plus tôt, vous pouvez créer des documents à la volée
dans des frames. Si, par exemple, vous avez deux frames nommées
frame1 et frame2 at que vous vouliez créer un nouveau document dans
frame2, vous pouvez écrire le code suivant dans frame1:
parent.frame2.document.open();
parent.frame2.document.close();
Page 26 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
Fenêtres et Frames
Un exemple :
<HTML><BODY><SCRIPT>
var accord = false, notes = ‘’;
accord = confirm('Vous aimez le chocolat?');
if ( accord )
notes = prompt("est-ce bon pour la santé ?",'Ecrivez ici');
else
notes = prompt("Mauvais ?",'Ecrivez ici');
alert(notes + '\nVous pouvez etre fier de vous.');
</SCRIPT></BODY></HTML>
3.4 L’Historique
Nous avons vu que les fenêtres et frames disposaient chacun d’un objet
document pour leur URL. Ils possèdent également un objet historique,
appelé history. Cet objet mémorise les URL de tous les documents
chargés dans cette fenêtre ou ce frame, permettant de se référer à ces
documents par la suite. L’utilisation la plus courante des historiques est
illustrée par l’exemple ci-dessous :
<A HREF=”#” ONCLICK=”window.history.go(-1)”>
Revient un pas en arrière </A>
<A HREF=”#” ONCLICK=”window.location.reload()”>
Ne va nulle part </A>
<A HREF=”#” ONCLICK=”window.location.reload(true)”>
Tourne toujours en rond, mais avec plus de rigueur </A>
<A HREF=”#” ONCLICK=”window.location.replace(url)”>
Oublie le passe</A>
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 27
Les formulaires
Chapitre 4
4 Les Formulaires
4.1 Description
Les formulaires HTML font partie des documents HTML. Il est donc naturel Un document HTML pouvant contenir plusieurs formulaires, il est naturel
que les balises correspondantes soient reflétées par des propriétés de que la propriété forms, proche du sommet de la hiérarchie, soit un tableau
l’objet document dans JavaScript. et contienne une entrée pour chaque formulaire.
Chaque objet formulaire a une propriété elements, qui est un tableau.
Le diagramme ci-après illustre l’organisation des objets relatifs aux Chacun des éléments de ce tableau est l’un des contrôles du formulaire.
formulaires par rapport à ceux du document. Les contrôles du formulaires sont srockés dans le tableau en suivant
l’ordre du document HTML. Les balises <INPUT>, <BUTTON>, <TEXTAREA> et
window
<SELECT> sont stockées comme éléments du tableau forms.
Ces objets ont tous en commun les propriétés type, value, name et form :
• La propriété type permet de reconnaître, depuis JavaScript,
document quelle balise a été utilisée pour créer l’élément ;
• La propriété value contient la valeur courante du contrôle ;
• La propriété name est une reprise de l’attribut NAME de la
balise ;
forms • La propriété form fait référence au tableau forms associé au
formulaire.
forms[1] forms[1] Voici un exemple de formulaire illustrant l’accès aux éléments de formulaires et à
leurs propriétés :
<HTML><BODY><FORM NAME="patient">
Symptômes de folie. Entrez le numéro de la semaine: <INPUT
elements elements NAME="semaines" TYPE="text">
Entendez-vous des voix? <INPUT NAME="symptome" TYPE="checkbox">
Avez-vous des visions? <INPUT NAME="symptome" TYPE="checkbox">
Votre personnage préféré:
<SELECT NAME="regime">
elements[0 elements[1 elements[0 elements[1 <OPTION VALUE="napoleon"> Napoléon Bonaparte
] ] ] ] <OPTION VALUE="folamour"> Dr. Folamour
</SELECT>
<INPUT TYPE="submit" value="Soumettre la requête">
</FORM></BODY></HTML>
options
Ces propiétés sont toutes valables pour le document :
with ( top.document )
options[0] options[1] {
forms[0].name; // = 'patient'
forms[0].method; // = 'GET' (méthode par défaut)
forms[0].elements.length; // = 5
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 29
Les formulaires
forms[0].elements[0].value; // = '', L’utilisateur peut le d’un script suivront leur comportement par défaut. Voici un exemple qui
modifier.
forms[0].elements[0].onchange; // null, pas de gestionnaire.
illustre le gain en interactivité et en efficacité apporté par la gestion des
forms[0].elements[1].name; // = 'symptome' événements :
forms[0].elements[2].checked; // = 'false', l’utilisateur peut
le modifier. <HTML><HEAD><SCRIPT>
forms[0].elements[3].options.length; // = 2 function gagne()
forms[0].elements[3].options[1].value; // 'dates' {
} var reponse = "C’est la bonne reponse !\n" +
"L’homme rampe quand il est jeune, marche quand il est
adulte et utilise une canne quand il vieillit\n" +
Remarquez que la propriété value d’un éléments texte (text) ets toujours "\nSi vous rencontriez un Sphinx egyptien aujourd’hui,
une chaîne de caractères, même si, comme dans l’exemple, on demande vous seriez parfaitement en securite !";
à l’utilisateur de taper un nombre. alert(reponse);
}
</SCRIPT></HEAD>
<BODY><FORM>
4.2.2 Nommer les éléments de formulaire <H1>Devinettes</H1>
Qu’est ce qui marche à quatre pattes le matin, à deux le midi et
trois le soir ?
Si l’on dispose de plus d’un formulaire, ou si on utilise de nombreux <BR> <INPUT TYPE="radio" ONCLICK="alert('Vous semblez vous aussi
éléments de formulaires, utiliser les tableaux à indices proposés par le en pleine confusion')"> Une table en pleine confusion
langage peux s’avérer déroutant, comme le montrent les quelques lignes <BR> <INPUT TYPE="radio" ONCLICK="alert('Vous avez pris un coup
de soleil, peut-etre ?')"> Le soleil
de l’exemple précédent. Fort heureusement, il est possible d’accéder aux <BR> <INPUT TYPE="radio" ONCLICK="gagne()"> L’homme
formulaires et champs de formulaires en utilisant leurs noms. C’est </FORM></BODY></HTML>
possible car JavaScript perçoit objets et tableaux presque de la même
façon. Voici donc un exemple illustrant ce principe : Dans cet exemple simple, le gestionnaire d’événements donne à
l’utilisateur des informations supplémentaires, en fonction de sa réponse.
with ( top.document )
{
Ces informations ne pourraient être affichées par un document HTML seul.
patient.name; // inutile
patient.method; Les événements onReset et onSubmit sont les seuls à s’appliquer au
patient.elements.length; // inutile si on connait tous les noms formulaire dans son ensemble. Ils correspondent aux actions par défaut
patient.semaines.value;
patient.semaines.onchange; des balises <INPUT TYPE=« submit »> et <INPUT TYPE=« reset »>.
patient.symptome[0].name; // pour cette ligne et la suivante:
traitement spécial L’événement onClick est en général le plus utilisé. On l’emploie pour
patient.symptome[1].checked; détecter la sélection de boutons radio ou de cases à cocher, pour exécuter
patient.regime.options.length;
patient.regime.options[1].value; des actions et traitements comme ouvrir de nouvelles fenêtres, etc.
}
L’événement onChange est, lui, déclenché quand le pointeur de la souris
de l’utilisateur quitte une zone qui vient de changer de valeur.
4.2.3 Evénements associés aux formulaires
Les gestionnaires onBlur et onFocus sont activés quand l’utilisateur se
Le modèle d’événements interne à JavaScript offre le moyen le plus déplace dans un formulaire d’un champ à l’autre (ou d’un frame à l’autre)
normal et habituel pour intercepter et traiter les saisies dans un formulaire. dans une page. Leur principale utilisation est donc de contrôler la façon
Si l’utilisateur désactive JavaScript dans son navigateur, tous les éléments dont l’utilisateur navigue entre les champs.
Page 30 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
Les formulaires
4.2.4 Donner le focus à un certain élément du formulaire 4.3.1 Formulaires de contrôle et de calcul
Avec l'aide de la méthode focus(), vous pouvez rendre vos formulaire plus Ce sont les types de formulaires les plus simples. Ils peuvent se résumer à
conviviales, plus ergonomiques. Vous pouvez définir quel élément à le un seul bouton intitulé « Fais ceci ». Une application classique consiste à
focus au commencement. Ou bien vous pouvez dire au navigateur de fournir à l’utilisateur une barre de boutons, pour faciliter sa navigation entre
donner le focus au formulaire dont les données sont incorrectes. Cela les pages d’un site. Cette utilisation des formulaires permet d’améliorer la
signifie que le navigateur positionnera le curseur dans l'élément du présentation visuelle d’un document, qui sinon ne contiendrait que du texte
formulaire de sorte que l'utilisateur n'aura pas à cliquer sur le formulaire et des liens classiques.
avant de saisir quoi que ce soit. Vous pouvez faire cela avec le morceau
de script qui suit : Une autre utilisation des formulaires consiste à utiliser l’interpréteur
JavaScript pour exécuter des traitements mathématiques ou logiques,
function setfocus() { suivant les entrées de l’utilisateur comme, par exemple, un convertisseur
document.first.text1.focus();
}
d’unité.
function test1(form) {
Il est possible d'étendre ceci avec le code suivant : if (form.text1.value == "")
alert("Entrez une chaîne!")
function setfocus() { else {
document.first.text1.focus(); alert("Salut "+form.text1.value+"! Donnée du formulaire ok!");
document.first.text1.select(); }
} }
L'élément text1 reçoit le focus et le texte contenu dans cet élément est function test2(form) {
if (form.text2.value == "" ||
sélectionné. form.text2.value.indexOf('@', 0) == -1)
alert("Adresse e-mail non valide!");
else alert("OK!");
}
4.3 Les différents types de formulaires // -->
</script>
</head>
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 31
Les formulaires
<body> 4.4.1 Un exemple
<form name="first">
Entrez votre nom :<br>
<input type="text" name="text1"> La façon la plus simple de soumettre un formulaire est par e-mail. La page
<input type="button" name="button1" value="Tester la donnée" suivante soumet le formulaire par e-mail :
onClick="test1(this.form)">
<P>
Entrez votre adresse e-mail :<br> <html>
<input type="text" name="text2"> <body bgcolor="#ffffff">
<input type="button" name="button2" value="Tester l'adresse" <form method=post action="mailto:[email protected]"
onClick="test2(this.form)"> enctype="text/plain">
</body> aimez vous cette page ?<br>
</html> <input name="choice" type="radio" value="1">Pas du tout.<br>
<input name="choice" type="radio" value="2" checked>Perte de
temps.<br>
Tout d'abord, commençons par regarder la section BODY du code HTML. <input name="choice" type="radio" value="3">Le pire site du
Nous créons deux formulaires composés chacun d'un élément texte et net.<br>
d'un bouton. Chaque bouton appelle une fonction (test1(…) ou test2(…)) <input name="submit" type="submit" value="envoyer">
</form>
avec comme argument this.form. De cette façon, nous sommes capable </body>
d'adresser le bonne éléments du formulaire (cela pourrait aussi permettre </html>
d'avoir une même fonction de test pour différents formulaires).
La fonction test1(form) teste si le contenu de l'élément nommé text1 du La propriété enctype="text/plain" est utilisée de façon à envoyer un texte
formulaire form est vide ou non. sans partie encodée. Cela rend le courrier plus lisible.
La fonction test2(form) teste si le contenu de l'élément nommé text2 du Dans cette page, il n'y pas de JavaScript, On pourrait toutefois en utilisé si
formulaire form est non vide et s'il contient un @. il y avait une vérification à effectuer.
Si vous voulez contrôler les données du formulaire avant son envoie sur le
Ces deux fonctions de test sont sommaires et mériterait d'être améliorée, réseau, vous pouvez utiliser l'événement onSubmit. Vous devez utiliser cet
mais elles illustrent bien l'utilisation de JavaScript pour effectuer un événement dans le tag <form>. Cela ressemble à ceci :
contrôle sur des données (par exemple, avant l'envoie de ces données à
un CGI). function validate() {
// contrôle si les données sont ok
// ...
Page 32 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
Les formulaires
Quand un formulaire sert à gérer plusieurs pages HTML, on peut alors 4.5.1 Un exemple
utiliser la technique du « panier à provisions » pour surmonter certaines
limitations de HTML. Tout d’abord, on crée le panier à provision. Ce panier sera stocké dans un
document à base de frames, l’un des frames étant utilisé pour contrôler le
Une utilisation classique du panier à provisions est de permettre à menu tandis qu’un autre servira à explorer les pages du catalogue.
l’utilisateur de choisir et de commander des objets dont la description se
trouve répartie sur plusieurs pages HTML : au fur et à mesure de la <!—catalogue.htm-->
navigation sur le site, l’utilisateur remplit son panier comme il le ferait dans <HTML>
<HEAD>
un supermarché, et le formulaire garde la mémoire des choix déjà <TITLE> Catalogue </TITLE>
effectués. Une fois sont choix fait, l’utilisateur peut d’un seul clic <SCRIPT>
commander la liste complète des articles sélectionnés. Pour se rappeler var panier = new Object;
cette liste, le formulaire a donc besoin d’un espace de stockage var length = 0;
temporaire. function achats(nom, prix, quantite)
{
Les formulaires précédents, du type « envoyer et oublier » suffiraient si ne if (quantite == 0)
se posaient pas trois problèmes : {
for (choix in panier)
• La taille du document et sa présentation : la page ne serait pas lisible {
et serait longue à charger si la liste complète des articles était faite sur if (panier[choix].nom == nom)
une seule page ; {
delete panier[choix];
• HTML ne propose aucun espace pour stocker temporairement des length--;
données : il faudrait donc que l’utilisateur commande article par }
article ; }
• HTML ne permet pas de découper un formulaire unique sur plusieurs }
else
pages différentes. {
this.nom = nom;
Avec les navigateurs récents, JavaScript vient à la rescousse du this.prix = prix;
this.quantite = quantite;
programmeur. Les traitements nécessaires sont les suivants : length++;
• Créer un espace de stockage provisoire pour le panier à provisions ; }
• Créer des formulaires dans chacune des pages du catalogues ; }
• Organiser ces formulaires pour que leurs données puissent être function eff_panier()
récupérées par le panier à provisions ; {
• Envoyer les données du panier à provisions si le client décide de length = 0;
confirmer ses achats. for (i in panier)
{
delete panier[i];
Le panier à provision sera donc un objet JavaScript disponible pour toutes }
les pages du catalogues (du site). Pour y parvenir, le meilleur moyen, voire }
</SCRIPT>
l’unique, est d’utiliser les frames. Ainsi, le panier ayant été déclaré lors du </HEAD>
chargement de la page contenant le frame de contrôle, le panier sera <FRAMESET COLS="300,*">
accessible à toutes les pages. De plus, l’utilisation des frames permettra <FRAME NAME="menu" SRC="menu.htm">
d’avoir une table des matière, un menu qui rendra le parcours du client <FRAME NAME="page" SRC="bienvenue.htm">
</FRAMESET>>
plus simple et direct.
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 33
Les formulaires
</HTML> </HTML>
La frame de contrôle sert de menu : Voici l’image de la première page qui accueille l’utilisateur :
<HTML>
<HEAD>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<SCRIPT>
if (top == self)
{
self.location.href = "catalogue.htm";
}
</SCRIPT>
<CENTER>
<H1>MENU</H1>
<HR><BR><BR>
<FORM>
<INPUT TYPE="button" ONCLICK='top.page.location="fruits.htm"'
VALUE="Fruits"><BR><BR>
<INPUT TYPE="button" ONCLICK='top.page.location="legumes.htm"'
VALUE="Légumes"><BR><BR>
<INPUT TYPE="button" ONCLICK='top.page.location="graines.htm"'
VALUE="Graines"><BR><BR>
<HR><BR><BR>
<INPUT TYPE="button" ONCLICK='top.page.location="commande.htm"'
VALUE="Voir la commande">
</FORM>
</CENTER>
</BODY> Toutes les pages du catalogue suivent le même schéma. Voici la
</HTML>
première :
Notez cependant que la page teste si elle est ouverte seule, auquel cas <HTML>
elle demande à charger la page contenant les frames du catalogues. <HEAD>
La page de garde sert de présentation pour l’utilisateur : <SCRIPT>
function rappel_comm()
{
<HTML>
if (top.panier['PO'])
<HEAD>
{
</HEAD>
document.form1.t1.value = top.panier['PO'].quantite;
<BODY BGCOLOR="#FFFFFF">
}
<SCRIPT>
if (top.panier['PR'])
if (top == self)
{
{
document.form1.t2.value = top.panier['PR'].quantite;
self.location.href = "catalogue.htm";
}
}
if (top.panier['OR'])
</SCRIPT>
{
<CENTER>
document.form1.t3.value = top.panier['OR'].quantite;
<H1>Bienvenue dans ma "Virtual - boutique"</H1>
}
</CENTER>
}
</BODY>
</SCRIPT>
Page 34 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
Les formulaires
</HEAD>
<BODY BGCOLOR="#FFFFFF" ONLOAD="rappel_comm()">
<SCRIPT>
if (top == self)
{
self.location.href = "catalogue.htm";
}
</SCRIPT>
<CENTER>
<H1>Les fruits du jour</H1>
<HR>
<H2>Choisissez des articles en précisant la quantité
désirée</H2>
<BR>
<TABLE>
<FORM NAME="form1">
<TR><TD><INPUT TYPE="text" NAME="t1" MAXLENGTH=2 SIZE=3
ONCHANGE="top.panier['PO'] = new top.achats('Pomme',15,
this.value)">
</TD><TD>Pomme - 15 FF le Kg<BR></TD></TR>
<TR><TD><INPUT TYPE="text" NAME="t2" MAXLENGTH=2 SIZE=3 Dans cet exemple, on identifie chacun des articles par deux lettres de
ONCHANGE="top.panier['PR'] = new top.achats('Poire',25, code (PO, PR, OR), mais on pourrait utiliser n’importe quelle autre
this.value)">
</TD><TD>Poire - 25 FF le Kg<BR></TD></TR> convention. La fonction rappel_comm() illustre comment on peut charger
<TR><TD><INPUT TYPE="text" NAME="t3" MAXLENGTH=2 SIZE=3 un nouveau frame tout en préservant les choix déjà effectués par
ONCHANGE="top.panier['OR'] = new top.achats('Orange',20, l’utilisteur. Cela permet à la page d’être abandonnée et visitée à nouveau
this.value)"> sans qu’aucune informations ne se perde.
</TD><TD>Orange - 20 FF le Kg<BR></TD></TR>
</FORM>
</TABLE> La dernière page est celle qui permet de passer commande des
</CENTER> objets du panier à provisions :
</BODY>
</HTML>
<HTML>
<HEAD>
Si l’utilisateur charge cette page, elle apparaît comme suit : </HEAD>
<BODY BGCOLOR="#FFFFFF">
<SCRIPT>
var choix, total, totaligne;
if (self == top)
{
self.location.href = "catalogue.htm";
}
else
{
if (top.length >0)
{
document.write('<H1>Vous avez choisi les articles suivants
: </H1><BR><BR><UL>');
total = 0;
for (choix in top.panier)
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 35
Les formulaires
{
with (top.panier[choix])
{
totaligne = quantite * prix;
document.write('<LI>'+quantite); Cette page ressemblera par exemple à ceci :
document.write('Kg de '+nom);
document.write(' à '+prix);
document.write(' FF le Kg, soit: '+totaligne+'
FF,');
total += totaligne;
}
}
document.write('<FORM METHOD="POST">');
document.write('<UL><BR><BR>Le prix total de votre commande
est de '+total+' FF.<BR><BR>');
for (choix in top.panier)
{
document.write('<INPUT TYPE="hidden" NAME="'+choix+'"
VALUE="'+top.panier[choix].quantite+'">');
document.write('<INPUT TYPE="button" VALUE="Annuler la
commande"
ONCLICK=\'top.eff_panier();top.page.location.href="bienvenue.ht
m"\'>');
document.write('     ');
document.write('<INPUT TYPE="submit"
VALUE="Commander">');
document.write('</FORM>');
document.write('</UL></UL>');
}
}
else
{
document.write("<H2>Faite d'abord votre choix parmis les
articles proposés.</H2>");
}
}
</SCRIPT>
</BODY>
</HTML>
Page 36 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
L'objet Image
Chapitre 5
5 L'objet Image
Maintenant nous allons jeter un coup d'œil à l'objet Image qui est
disponible depuis JavaScript 1.1 (c.-à-d. depuis Netscape Navigator 3.0).
Avec l'aide de l'objet Image vous pouvez changer des images sur une
page web. Cela nous permet de créer des animations par exemple.
En premier, voyons comment les images dans une page web peuvent être
adressées à travers JavaScript. Toutes les images sont représentées à
travers une collection. Cette collection est appelée images. C'est une
propriété du document objet. Chaque image sur une page web obtient un
nombre. La première image obtient le nombre 0, la deuxième image
obtient le nombre 1 et ainsi de suite. Donc nous pouvons adresser la
première image à travers document.images[0].
Chaque image dans un document HTML est considérée comme un objet
Image. Un objet Image a certaines propriétés qui peuvent être accédées à
travers JavaScript. Vous pouvez voir quelle dimension a une image avec
les propriétés width et height par exemple. document.images[0].width vous
donne la largeur (en pixel) de la première image sur la page web.
Si vous avez beaucoup d'images sur une page, il est difficile de tenir
compte de toutes les images en utilisant leur numéro. Donner des noms
aux images différentes résout ce problème. Si vous déclarez une image
avec ce code :
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 37
L'objet Image
5.2 Chargement de nouvelles images img3.gif est chargée quand la deuxième ligne de ce code est exécutée.
Comme son nom l'indique, l'image hiddenImg n'est pas affichée après que
le navigateur ait terminé de la charger. Elle est juste gardée dans la
Bien que ce soit agréable de savoir comment obtenir la dimension d'une
mémoire (ou mieux dans le cache) pour usage ultérieur. Pour afficher cette
image sur une page web, ce n'est pas ce que nous voulions savoir. Nous
image nous pouvons utiliser maintenant cette ligne:
voulons changer des images sur une page web. Pour cela, nous avons
besoin de la propriété src. Comme dans le tag <img>, la propriété src document.myImage.src= hiddenImg.src;
représente l'adresse de l'image affichée, avec JavaScript 1.1, vous pouvez
assigner de nouvelles adresses à une image déjà chargée. Le résultat est Maintenant l'image est prise du cache et est affichée immédiatement. Bien
que l'image localisée à la nouvelle adresse est chargée. sûr le navigateur a dû finir le préchargement pour être capable d'afficher
Cette nouvelle image remplace la vieille image sur la page web. Regardez une image sans délai. Donc si vous avez beaucoup d'images spécifiées
cet exemple: pour le préchargement, il peut y avoir quand même un délai si le
navigateur est occupé à télécharger toutes les autres images. Vous devez
<img src="img1.gif" name="myImage" width=100 height=100>
considérer toujours la vitesse du réseau - le téléchargement des images
ne va pas avec ce code montré ici plus vite. Nous essayons de
L'image img1.gif est chargée et prends le nom myImage. La ligne de code
commencer le téléchargement des images plus tôt - donc l'utilisateur peut
suivante remplace la vieille image img1.gif par la nouvelle img2.gif.
les voir plus tôt. Cela rend le processus entier beaucoup plus lisse.
document.myImage.src= "img2.gif";
La nouvelle image aura toujours la même taille que l'ancienne. Vous ne 5.4 Changer des images en fonction d'événement
pouvez pas changez la taille de la surface sur laquelle l'image est affichée. générés par l'utilisateur
Ce script sera certes plus long, mais une fois que on l'aura écrit, il sera if (browserOK) {
for (i = 0; i < objCount; i++) {
réutilisable à volonté. if (document.images[pics[i][2]] != null)
Pour réaliser un tel script, nous devons observer les deux exigences if (name != pics[i][2]) {
suivantes : // Affiche la première image
- Nombre indéterminé d'images - il ne devrait pas importer qu'il y document.images[pics[i][2]].src = pics[i][0].src;
} else {
est 10 ou 100 images utilisées // Affiche la seconde image car le curseur est au
- Ordre indéterminé des images - ce devrait être possible de dessus d'elle
changer l'ordre des images sans changer le code document.images[pics[i][2]].src = pics[i][1].src;
}
}
Le script qui suit réalise tout ceci : }
}
<html>
<head> function off(){
if (browserOK) {
<script language="JavaScript"> for (i = 0; i < objCount; i++) {
<!-- caché // Affiche toutes les premières images
// ok, nous avons un Navigateur avec JavaScript if (document.images[pics[i][2]] != null)
var browserOK = false; document.images[pics[i][2]].src = pics[i][0].src;
var pics; }
// --> }
</script> }
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 39
L'objet Image
Ce script place toutes les images dans un tableau nommé pics. La fonction La balise MAP permet de déterminer les régions sensibles d'une image. Il
preload(), qui est appelée au début, construit ce tableau. Comme vu avez est possible de positionner l'URL javascript dans cette balise comme le
pu le remarquer, l'appel de cette fonction se fait comme suit : montre l'exemple suivant :
Page 40 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
L'objet Image
</HTML>
Cette page donne l'affichage suivant : Si, l'utilisateur clique sur la ville d'Amiens, cela donne :
Pas de coordonnées mais si vous cliquez sur la carte x est 305 et y est 84
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 41
L'objet Image
Page 42 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
Les layers
Chapitre 6
6 Les Layers
Les layers sont un nouvel aspect de Netscape Navigator 4.0. Cela autorise
le positionnement absolu d'objets comme des images. En plus, cela vous
permet de déplacer des objets sur votre page HTML. Vous pouvez aussi
cacher des objets.
Les layers peuvent être manipulées avec l'aide de JavaScript facilement.
Vous pouvez utiliser les layers seulement à partir de Netscape Navigator
4.0!
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 43
Les layers
Pour créer un layer, nous avons besoin des tags suivants <layer> ou Le texte est affiché est dessus de l'image
<ilayer>. Vous pouvez utiliser les propriétés suivantes:
Voici le code source :
Propriétés Description
name="layerName" Le nom du layer <html>
left=xPosition La position horizontale du coin supérieur
<layer name=pic z-index=0 left=200 top=100>
gauche <img src="img.gif" width=160 height=120>
top=yPosition La position verticale du coin supérieur gauche </layer>
z-index=layerIndex Le numéro d'index en z du layer
width=layerWidth Largeur du lauer en pixel <layer name=txt z-index=1 left=200 top=100>
<font size=+4> <i> Demo de Layers </i> </font>
clip="x1_offset,y1_offset, Défini la zone du layer qui sera apparente </layer>
x2_offset,y2_offset"
above="layerName" Défini au dessus de quel layer celui ci sera </html>
visible
below="layerName" Défini au dessous de quel layer celui ci sera Comme vous pouvez le voir,, nous avons défini deux layers avec le tag
visible <layer>. Ces deux layers sont positionnés au même emplacement
Visibility=show|hide|inherit La visibilité du layer (200/100 défini avec les propriétés top et left). Tout ce qui ce trouve entre
bgcolor="rgbColor" La couleur de fond les tags <layer> et </layer> (ou bien <ilayer> et </ilayer>) appartient à ce
background="imageURL" L'image de fond layer.
Vous pouvez voir que nous avons utilisé le propriété z-index. Cela défini
Le tag <layer> est utilisée pour des layers qui peuvent être placées dans quel ordre les layers doivent apparaître. Par exemple, dans le
explicitement. Si vous ne spécifiez pas de position (avec les propriétés top programme précédent, nous disons au navigateur que le texte doit
et left) le layer sera placé dans le coin supérieur gauche de la fenêtre. apparaître au dessus de l'image. Le layer avec la valeur de z-index la plus
Le tag <ilayer> crée un layer dont la position dépend du flux du document. élevée sera affiché au dessus.
Maintenant commençons avec un exemple facile. Nous voulons créer Si on positionne le z-index à 100 pour le premier layer, le texte apparaîtra
deux layers. Dans le premier, nous avons mis une image et dans le sous l'image puisqu'il aura un z-index inférieur.
second nous avons mis un texte. Ce que nous voulons faire est afficher le
texte au-dessus de l'image.
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 45
Les layers
document.layers["myLayer2"].left= pos;
}
Bien que les dimensions de l'image soit 209x264 pixels, vous ne pouvez
// --> voir qu'une petite partie de celle-ci (figure (a)).
</script> Cette partie a pour dimension 90x70 (en pixel). Les deux premières
</head> valeurs spécifiées à travers l'attribut clip (dans le tag HTML <layer> ou
<body onLoad="setInterval('move()', 20)">
<ilayer>) définissent le coin supérieur gauche de la zone de clipping. Les
<ilayer name=myLayer2 left=0> deux valeurs suivantes définissent le coin inférieur droit. La figure (b)
<font size=+1 color="#0000ff"><i>Ce texte est à l'intérieur d'un illustre ceci:
layer</i></font>
</ilayer>
</body>
</html>
Nous créons un layer appelé myLayer2. Vous pouvez voir que nous
utilisons l'événement onLoad dans le tag <body>. Nous avons besoin de
commencer le défilement du layer dès que la page est chargée. Nous
utilisons la fonction setInterval() à l'intérieur d l'événement onLoad. C'est
une nouvelle méthode de JavaScript 1.2 (c.-à-d. la version JavaScript qui
est rendue effectif dans Netscape Navigator 4.0). Cela peut être utilisé
pour appeler une fonction dans un certain intervalle du temps maintes fois.
Nous avons utilisé le setTimeout() pour ceci dans les dernières leçons.
setInterval() travaille presque de la même façon - mais vous devez
l'appeler seulement une fois.
À travers setInterval() nous appelons la fonction move() toutes les 20
millisecondes. La fonction move() positionne le layer à un certain endroit.
Comme nous appelons cette fonction indéfiniment, toutes les 20
millisecondes, nous obtenons un défilement du texte. Tout ce que nous
avons à faire dans la fonction move() est calculer la position dy layer et figure (a) figure (b)
assigner cette valeur à document.layers["myLayer2"].left.
Des choses plus intéressantes peuvent être accomplies en utilisant le
clipping avec JavaScript. Pour cela, vous pouvez changer les propriétés
6.5 Le clipping clip.left, clip.top, clip.right et clip.bottom de l'objet Layer. Assignez juste
une nouvelle valeur en pixel à une de ces propriétés et la région de
clipping changera. L'exemple suivant change la région de clipping
Vous pouvez définir quelle partie rectangulaire d'un layer sera visible. Tout
dynamiquement. L'utilisateur a l'impression l'image est construite
ce qui sera à l'extérieur de cette région ne sera pas montré. C'est ce que
lentement de l'intérieur ver s l'extérieur :
l'on appelle le clipping (la coupure). Vous pouvez utiliser la propriété clip
comme ceci : <html>
<head>
<ilayer left=0 top=0 clip="20,50,110,120">
<img src="davinci.jpg" width=209 height=264> <script language="JavaScript">
</ilayer> <!-- caché
Page 46 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
Les layers
// --> Nous avons déjà vu qu'un layer peut contenir plusieurs objets différents. Ils
</script> peuvent même contenir d'autres layers. Vous pouvez vous demander à
</head> quoi cela peut servir ?. Il y a plusieurs raisons pour utiliser des layers
<body> emboîtés. Nous jetterons un coup d'œil à quelques exemples qui
démontrent l'usage de layers emboîtés.
<ilayer name="imgLayer" clip="0,0,0,0"> Le premier exemple utilise un layer (appelé le parentLayer) lequel contient
<img name=davinci src="davinci.jpg" width=209 height=264>
</ilayer>
deux autres layers (layer1 et layer2).
<form> Sur la page, il y a trois boutons. Ces boutons vont démarrer ou arrêter les
<input type=button value="Début" onClick="start()"> mouvements des différents layers. Comme vous pouvez le constater,
</form>
bouger le layer parent affecte les deux autres layers. Mais bouger le layer
</body> layer1 (ou layer2) affecte seulement celui-ci. Donc, cela vous montre que
</html> l'on peut définir des groupes d'objets en utilisant les layers emboîtés.
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 47
Les layers
if (pos1 > 20) dir1= true;
Voici le code de l'exemple : document.layers["parentLayer"].layers["layer1"].top= 10 +
pos1;
<html> }
<head>
if (move2) {
<script language="JavaScript"> // layer2 bouge
<!-- caché if (dir2) pos2--
else pos2++;
// position de départ
var pos0= 0; if (pos2 < -20) dir2= false;
var pos1= -10;
var pos2= -10; if (pos2 > 20) dir2= true;
// on bouge ? document.layers["parentLayer"].layers["layer2"].top= 10 +
var move0= true; pos2;
var move1= false; }
var move2= false;
}
// quelle direction ?
var dir0= false; // -->
var dir1= false; </script>
var dir2= true; </head>
Page 48 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
Les layers
</head>
Vous pouvez voir que nous définissons deux layers à l'intérieur du <body onLoad="setInterval('moveNclip()', 20);">
parentLayer. Ce sont les layers emboîtées. Comment est-ce que nous
accédons à ces layers avec JavaScript? Vous pouvez voir comment cela <ilayer name="clippingLayer" z-index=0 clip="20,100,200,160"
est fait dans la fonction move() : top=0 left=0>
<ilayer name="imgLayer" top=0 left=0>
<img name=davinci src="davinci.jpg" width=209 height=264>
document.layers["parentLayer"].left= 100 + pos0; </ilayer>
... </ilayer>
document.layers["parentLayer"].layers["layer1"].top= 10 + pos1;
... </body>
document.layers["parentLayer"].layers["layer2"].top= 10 + pos2; </html>
Pour accéder aux layers emboîtés, vous ne pouvez pas juste écrire
document.layers["layer1"] ou document.layers["layer2"] parce que les De nouveau, vous pouvez voir comment accéder aux layers emboîtés :
layers layer1 et layer2 sont à l'intérieur du layer parentLayer.
document.layers["clippingLayer"].layers["imgLayer"].top= 100 +
Nous avons vu comment définir une région de clipping. L'exemple suivant pos;
utilise une région de clipping et une image en mouvement. Ce que nous
voulons faire est que la région de clipping soit fixe - c.-à-d. qu'elle ne suit
pas le mouvement de l'image. 6.7 Effets avec des layers transparents
Voici le code : Des effets intéressants peuvent être créés avec l'aide de layers
(partiellement) transparents. Surtout les images avec des parties
<html>
<head>
transparentes peuvent créer un effet sympa. Tous les formats d'image ne
peuvent pas manier des parties transparentes. Pour le moment, le format
<script language="JavaScript"> le plus utiliser est gif89a.
<!-- caché Le format PNG supporte des parties transparentes aussi.
var pos= 0; // position de départ
var direction= false; Voici un script utilisant des images partiellement transparentes :
function moveNclip() { <html>
<head>
if (pos<-180) direction= true;
if (pos>40) direction= false; <script language="JavaScript">
<!-- hide
if (direction) pos+= 2 var pos= 0; // position de départ
else pos-= 2; var myTimer= null;
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 49
Les layers
else myTimer= null;
}
function start() {
if (myTimer== null) {
pos= 0;
move();
}
}
// -->
</script>
</head>
<body onLoad="move()">
<form>
<input type=button value="Départ" onClick="start();">
</form>
<ilayer name="clippingLayer" z-index=0 clip="209,264" top=0
left=0>
<layer name="imgLayer1" top=-264 left=0>
<img name=davinci1 src="davinci1.gif" width=209 height=264>
</layer>
<layer name="imgLayer2" top=264 left=1>
<img name=davinci2 src="davinci2.gif" width=209 height=264>
</layer>
</ilayer>
</body>
</html>
Cet exemple utilise ces deux images (les parties grises pleines sont
transparentes):
Page 50 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
Le modèle d'événement de JavaScript 1.2
Chapitre 7
Vous pouvez voir que quelques nouveaux événements ont été rendus
effectif. Nous allons jeter un coup d'œil à quelques-uns de ces
événements.
En premier, regardons à quoi sert l'événement Resize. Avec l'aide de cet
événement nous pouvons détecter toutes les fois que la fenêtre est
redimentionnée par l'utilisateur. Le script suivant démontre ceci :
<html>
<head>
<script language="JavaScript">
window.onresize= message;
function message() {
alert("La fenêtre a été redimensionnée!");
}
</script>
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 51
Le modèle d'événement de JavaScript 1.2
</head> chose, vous ne devez pas écrire de parenthèses après message. Si vous
<body>
Redimensionnez la fenêtre SVP.
écrivez window.onresize = message(), le navigateur interprète le
</body> message() comme un appel à la fonction. Mais dans ce cas nous ne
</html> voulons pas appeler la fonction directement - nous voulons juste définir le
manipulateur de l'événement.
Avec la ligne :
window.onresize= message;
7.2 L'objet Event
nous définissons le "manipulateur" d'événement. Cela veut dire que la
fonction message() est appelée dès que la fenêtre est redimentionnée. Un nouvel objet Event a été ajouté à JavaScript 1.2. Il contient des
Vous n'êtes peut-être pas familier avec cette façon de définir des propriétés qui décrivent un événement. Chaque fois qu'un événement a
manipulateurs d'événement, mais cela n'a rien de nouveau. Si vous avez lieu, un objet Event est passé au manipulateur de l'événement.
un objet Buton par exemple, vous pouvez définir le manipulateur L'exemple suivant montre une image. Vous pouvez le cliquer dessus
d'événement comme ceci: quelque part. Une fenêtre d'alerte affichera les coordonnées de
l'événement de la souris.
<form name="myForm">
<input type="button" name="myButton" onClick="alert('Click event Voici le code :
occured!')">
</form>
<layer>
<a href="#" onClick="alert('x: ' + event.x + ' y: ' + event.y);
Mais vous pouvez le faire aussi comme ceci : return false;">
<img src="davinci.jpg" width=209 height=264 border=0></a>
<form name="myForm"> </layer>
<input type="button" name="myButton">
</form> Vous pouvez voir que nous utilisons onClick dans le tag <a>, comme nous
...
aurions fait avec les versions JavaScript antérieures. Ce qui est nouveau
est que nous utilisons event.x et event.y pour créer le contenu de la
<script language="JavaScript> fenêtre d'alerte.. C'est l'objet Event dont nous avons besoin pour connaître
les coordonnées de la souris.
document.myForm.myButton.onclick= message;
J'ai mis tout dans un tag<layer>. Ainsi, nous connaîtrons les coordonnées
function message() { relatif au layer, c.-à-d. dans notre cas l'image. Autrement nous aurions eu
alert('Click event occured!'); les coordonnées relatives à la fenêtre du navigateur. (return false; est
} utilisé ici afin que le navigateur ne suive pas le lien)
</script>
L'objet Event a les propriétés suivantes (nous en verrons quelques-unes
Vous pouvez penser que la deuxième alternative est un peu compliqué. dans les prochains exemples):
Donc pourquoi est-ce que nous l'utilisons dans le premier script? Le
problème est que l'objet window n'est pas défini à travers un certain tag -
donc nous devons utiliser la deuxième possibilité. Propriété Description
Deux choses importantes: En premier vous ne devez pas écrire
window.onResize - c.-à-d. vous devez utiliser des minuscule. Deuxième data Tableau d'URLs des objets lachés quand un événement
DragDrop intervient.
Page 52 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
Le modèle d'événement de JavaScript 1.2
window.captureEvents(Event.CLICK | Event.MOVE);
7.3 La capture d'événement
Vous pouvez voir que nous utilisons le return true; à l'intérieur de la
fonction handle() que nous avons défini comme fonction qui manie
Un aspect important est appelé la capture d'événement. Si quelqu'un, par
l'événement. Cela veut dire que le navigateur va suivre le lien après que la
exemple, clique sur un bouton, le manipulateur d'événement onClick de ce
fonction handle() est été exécutée. Si vous écrivez le return false; les
bouton est appelé. Avec l'aide de la capture d'événement vous pouvez
actions suivantes sont supprimées.
faire en sorte que votre fenêtre, document ou objet layer capture
l'événement avant qu'il soit manié par l'objet Button. De cette manière,
Si vous définissez un manipulateur d'événement onClick dans le tag <a>
votre fenêtre, document ou objet layer peuvent manier l'événement avant
que vous vous rendrez compte que ce manipulateur d'événement n'est
qu'il atteigne le sa cible.
pas appelé. Il est évident que l'objet window capture l'événement avant
Jetons un coup d'œil à un exemple pour voir cela :
qu'il arrive à l'objet link. Si vous définissez lune fonction handle()comme
<html> ceci :
<head>
<script language="JavaScript"> function handle(e) {
alert("The window object captured this event!");
window.captureEvents(Event.CLICK); window.routeEvent(e);
return true;
window.onclick= handle; }
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 53
Le modèle d'événement de JavaScript 1.2
<html>
<script language="JavaScript">
window.captureEvents(Event.CLICK);
window.onclick= handle;
function handle(e) {
document.links[1].handleEvent(e);
}
</script>
<a href="test.html">Cliquez sur ce lien</a><br>
<a href="test.html"
onClick="alert('Manipulateur d\'événement du second
lien!');">Second lien</a>
</html>
Tous les événements Click sont envoyés au deuxième lien - même si vous
ne cliquez pas sur le lien directement!
Le script suivant démontre que votre script peut réagir pour des
événements de touches. Appuyez juste sur une touche pour voir le script
en action.
<html>
<script language="JavaScript">
window.captureEvents(Event.KEYPRESS);
window.onkeypress= pressed;
function pressed(e) {
alert("Touche appuyée! Valeur ASCII : " + e.which);
}
</script>
Appuyez sur une touche ...
</html>
Page 54 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
Drag & Drop
Chapitre 8
JavaScript ne supporte pas directement le Drag & Drop. Cela veut dire
nous ne pouvons pas juste spécifier une propriété dragable (ou quoi que)
dans un objet image. Nous devons nous même écrire le code pour réaliser
cela. Vous verrez que ce n'est pas trop difficile.
Donc de quoi avons nous besoin? Nous avons besoin de deux choses. En
premier nous devons enregistrer certains événements de la souris, c.-à-d.
comment est-ce que nous savons quel objet sera déplacé à quelle place?
Alors nous avons besoin de réfléchir sur comment nous pouvons afficher
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 55
Drag & Drop
les objets en mouvement sur l'écran. Bien sûr nous utiliserons les layers En premier nous disons à l'objet window de capturer l'événement Click.
pour définir des objets différents et les déplacer sur l'écran. Chaque objet Pour cela, nous utilisons la méthode captureEvent(). La ligne :
est représenté par un layer.
window.onclick= displayCoords;
8.2 Les événements de la souris avec JavaScript 1.2 définit ce qui se passe quand un événement Click se produit. Il dit au
navigateur d'appeler la fonction displayCoords() comme une réaction à un
événement Click. displayCoords () est une fonction qui est définit comme
Quels événements de la souris avons nous? Nous n'avons pas ceci :
d'événement MouseDrag - mais nous pouvons accomplir celaen utilisant
les événements MouseDown, MouseMove et MouseUp. JavaScript 1.2 function displayCoords(e) {
utilise un nouveau modèle d'événement. Sans ce modèle d'événement alert("x: " + e.pageX + " y: " + e.pageY);
nous ne pourrions pas résoudre notre tâche. }
L'utilisateur pousse le bouton de la souris à l'intérieur de la fenêtre du
navigateur quelque part. Notre script doit réagir sur cet événement et Vous pouvez voir que cette fonction prend un argument (nous l'appelons
calculer quel objet (c.-à-d. layer) a été cliqué. Nous avons besoin de e). C'est l'objet Event qui est passé à la fonction displayCoords(). L'objet
connaître les coordonnées de l'événement de la souris. Event a les propriétés pageX et pageY qui représentent les coordonnées
Une autre chose importante est la capture d'événement. Si un utilisateur de la souris. La fenêtre d'alerte affiche ces valeurs.
clique sur un bouton, l'événement de la souris est envoyé à l'objet button
directement. Mais dans notre ca, nous voulons que la fenêtre manie notre
événement. Donc nous devons laissé la fenêtre capturer l'événement de la 8.3 MouseDown, MouseMove et MouseUp
souris, c.-à-d. que l'objet window obtient cet événement et peut réagir.
L'exemple suivant montre ceci. Vous pouvez cliquer à l'intérieur de la Comme je l'ai déjà dit, JavaScript n'a pas d'événement MouseDrag. Par
fenêtre du navigateur, n'importe où. Une fenêtre d'alerte affiche les conséquent nous devons utiliser les événements MouseDown,
coordonnées de la souris. MouseMove et MouseUp pour implémenter le Drag & Drop. L'exemple
Voici le code : suivant démontre l'usage de MouseMove. Les coordonnées réelles du
curseur de la souris sont affichées dans la barre de status :
<html>
<html>
<script language="JavaScript">
<!--
<script language="JavaScript">
<!--
window.captureEvents(Event.CLICK);
window.captureEvents(Event.MOUSEMOVE);
window.onclick= displayCoords;
window.onmousemove= displayCoords;
function displayCoords(e) {
function displayCoords(e) {
alert("x: " + e.pageX + " y: " + e.pageY);
status= "x: " + e.pageX + " y: " + e.pageY;
}
}
// -->
// -->
</script>
</script>
Les coordonnées de la souris sont affichées dans la barre de
Cliquez quelque part à l'intérieur de la fenêtre.
status.
</html>
</html>
Page 56 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
Drag & Drop
Notez que vous devez écrire Event.MOUSEMOVE où MOUSEMOVE doit Vous pouvez voir que nous utilisons le signe | (ou) pour définir plusieurs
être en majuscule. Quand vous définissez quelle fonction doit être appeler événements qui seront capturés par l'objet window. Les deux prochaines
quand l'événement MouseMove se produit vous devez utiliser des lignes définissent ce qui se passe quand ces événements se produisent :
minuscules : window.onmousemove =...
window.onmousedown= startDrag;
window.onmouseup= endDrag;
Maintenant nous pouvons combiner les deux derniers exemples. Nous
voulons que les coordonnées du curseur de la souris soient affichées
quand la souris est déplacée avec le bouton appuyé. La prochaine ligne de code définit se qui se passe lorsque l'objet window
Voici le code : capte un événement MouseMove :
window.onmousemove= moveIt;
<html>
<script language="JavaScript"> Mais attendez, nous n'avons pas défini Event.MOUSEMOVE dans
<!-- window.captureEvents()! Cela veut dire que cet événement n'est pas
window.captureEvents(Event.MOUSEDOWN | Event.MOUSEUP);
capturé par l'objet window. Donc pourquoi est-ce que nous disons à l'objet
window d'appeler moveIt() bien que cet événement n'arrive jamais à l'objet
window.onmousedown= startDrag; window? La réponse à cette question peut être trouvée dans la fonction
window.onmouseup= endDrag; startDrag() qui est appelée dès qu'un événement MouseDown se produit :
window.onmousemove= moveIt;
function moveIt(e) { Cela veut dire l'objet window capture l'événement MouseMove dès que le
// Affiche les coordonnées bouton de la souris est appuyé. Nous devons cesser de capturer
status= "x: " + e.pageX + " y: " + e.pageY;
} l'événement MouseMove quand l'événement MouseUp se produit. Cela
donne la fonction endDrag() avec l'aide de la méthode releaseEvents() :
function endDrag(e) {
window.releaseEvents(Event.MOUSEMOVE); function endDrag(e) {
} window.releaseEvents(Event.MOUSEMOVE);
}
// -->
</script>
La fonction moveIt() affiche les coordonnées de la souris dans la barre de
Appuyez sur le bouton de la souris et bougez la. Les coordonnées status.
seront affichées dans la barre de status.
</html>
Maintenant nous avons tous les événements nécessaire pour réaliser le
Drag & Drop. Il ne nous reste plus qu'à afficher les objets sur l'écran.
Premièrement, nous disons à l'objet window de capturer les événements
MouseDown et MouseMove :
8.4 Afficher des objets en mouvement
window.captureEvents(Event.MOUSEDOWN | Event.MOUSEUP);
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 57
Drag & Drop
Nous avons vu dans les chapitres précédents que nous pouvons créer des if ((dragObj[i].left < e.pageX) &&
(dragObj[i].left + dragObj[i].clip.width > e.pageX) &&
objets en mouvement avec l'aide des layers. Tout ce que nous devons (dragObj[i].top < e.pageY) &&
faire est maintenant de connaître quel objet l'utilisateur a cliqué. Alors cet (dragObj[i].top + dragObj[i].clip.height > e.pageY)) {
objet doit suivre les mouvements de la souris. Voici le code d'un script qui hit= i;
réalise cela : dx= e.pageX- dragObj[i].left;
dy= e.pageY- dragObj[i].top;
break;
<html> }
<head> }
return hit;
<script language="JavaScript"> }
<!--
Le tableau dragObj prend tous les layers qui peuvent être déplacés par l'intérieur d'un certain rectangle. Si c'est vrai vous appelez une fonction qui
l'utilisateur. Chaque layer prend un numéro dans le tableau dragObj. Nous enregistre tous les articles pour acheter. Alors vous pourriez montrer
aurons besoin de ce numéro plus tard. l'article à l'intérieur du panier à provisions.
Vous pouvez voir que nous utilisons le même code que précédemment
pour capturer les événements de la souris : 8.6 Améliorations
window.captureEvents(Event.MOUSEDOWN | Event.MOUSEUP);
Il y a plusieurs façons d'améliorer notre script. Pour commencer, nous
window.onmousedown= startDrag; pouvons vouloir changer l'ordre des layers dès que l'utilisateur clique sur
window.onmouseup= endDrag; un objet. Autrement, ça a une apparence un peu étrange : si vous
window.onmousemove= moveIt;
déplacez un objet, il peut disparaître derrière un autre objet. Vous pouvez
résoudre ce problème en changeant l'ordre des layers dans la fonction
La ligne suivante a été ajoutée dans la fonction startDrag() :
startDrag().
currentObj= whichObj(e); Je ne pense pas que vous serez satisfaits avec juste des éléments rouge,
vert et bleus sur votre page web. Ajoutez quelques graphiques, de la
La fonction whichObj() détermine quel objet l'utilisateur a cliqué. Elle fraîcheur et les utilisateurs se souviendront de votre page. Vous pouvez
renvoie le numéro du layer. Si aucun layer n'a été cliqué, elle renvoie la placer n'importe quoi à l'intérieur des objets layer. Ainsi placez un seul tag
valeur null. La variable currentObj stocke cette valeur. Cela veut dire que <img> si vous voulez que votre objet paraisse comme une image…
currentObj représente le numéro du layer qui est déplacé à ce moment (ou
elle vaut null si aucun layer n'est déplacé).
Dans la fonction whichObj(), nous vérifions les propriétés left, top, width et
height pour chaque layer. Avec ces valeurs, nous pouvons vérifier sur quel
objet l'utilisateur a cliqué.
Nous avons maintenant tout ce dont nous avons besoin pour implémenter
un Drag & Drop. Avec notre script, l'utilisateur peut déplacer des objets sur
notre page web. Mais cependant, nous n'avons pas parlé du lâcher des
objets. Supposons que vous voulez créer un magasin en ligne. Vous avez
plusieurs articles qui peuvent être mis dans un panier à provisions.
L'utilisateur déplacerai ces articles au dessus du panier à provisions et les
lâcherai là. Cela veut dire nous devons enregistrer quand l'utilisateur fait
tomber un objet sur le panier à provisions - ce qui signifie qu'il veut
l'acheter.
Que devons nous changer pour implémenter cela? Nous devons vérifier à
quelle place l'objet est lâché (après un événement MouseUp) - c.-à-d.
nous devons ajouter quelque ligne de code à la fonction endDrag(). Nous
pourrions vérifier par exemple si les coordonnées de la souris sont à
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 59
Drag & Drop
Page 60 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
Références
Chapitre 9
9 Références
window : l'objet de plus haut niveau, c'est la fenêtre que vous voyez dans
le navigateur.
child windows : ce sont les fenêtres filles que l'on retrouve dans chacune
des frames. On verra leur appel dans les déclarations des
frames
location : c'est l'URL courante et ses propriétés
history : ce sont les URL précédemment visitées.
document : ce sont les propriétés du document courant, comme le titre,
les couleurs de fonds, les formulaires
navigator : ce sont le nom et la version du navigateur ainsi que les types
MIME et les PLUG-INS supportés par le client.
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 61
Références
Page 62 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
Références
9.3.2 Applet
9.3 Les Objets
Nom Définition Voir aussi
9.3.1 Anchor applet permet d'accéder aux paramètres d'une applet applet
L'applet doit être appelée avec un paramètre
MAYSCRIPT
Nom Définition Voir aussi
Syntaxe document.Applet[numero] definition
Anchor Les anchors sont les destinations (ou les signets) Link <APPLET CODE="monapplet.class" WIDTH50
des liens hypertextes HEIGHT=25
Syntaxe <A HREF="URL" NAME="Nom" TARGET="fenetre"> Définition NAME="momApp" MAYSCRIPT>
Texte </A> Tableau document.applets[] -
Tableau document.anchors[0] .. - Propriété length (nombre d'applets dans le doc) -
document.anchors[document.anchors.length - 1 ] Méthode eval – toString - valueOf -
Propriété length - Se rapporte à Document -
Méthode eval – toString - valueOf - Evénement - -
Se rapporte à Document - Exemple <SCRIPT>
Evénement - - Document.write('Ce document contient
<HTML> ',document.applets.length,' applets')
Exemple </SCRIPT>
<HEAD>
<TITLE>UNGI © Links et Anchors</TITLE> Remarque Version 1.1 -
</HEAD>
<BODY>
<SCRIPT>
window2=open("suscribe.htm","Abonnement","sc 9.3.3 Area
rollbars=yes,width=250, height=400")
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 63
Références
Page 64 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
Références
<SCRIPT>
<! a mettre dans le corps 9.3.10 Element array
AfficheHeure () Nom Définition Voir aussi
</SCRIPT>
Remarque Il est normal que l'heure de s'affiche pas si vous - element array les tableaux éléments permettent d'indexer les Form
imprimez le document, car le code généré par éléments d'un formulaire par ordre d'apparition
JavaScript ne s'imprime pas! (check box, text area..)
Syntaxe formName.elements[index] – -
formName.elements.length
Tableau document.anchors[0] .. -
document.anchors[document.anchors.length - 1 ]
Propriété length -
Méthode - -
Se rapporte à form -
Evénement - -
Exemple -
Remarque - -
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 65
Références
Page 66 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
Références
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 67
Références
Exemple <SCRIPT>
<--! partie a insérer dans l'en-tête
function Reload () {
9.3.16 Hidden history.go(0)
}
Nom Définition Voir aussi </SCRIPT>
hidden l’argument hidden permet de soumettre une cookie
requête de formulaire au serveur sans afficher la <INPUT TYPE="image" BORDER=0
SRC="gif/reload.gif" onClick="Reload()"
commande ainsi masquée
Syntaxe <INPUT TYPE= »hidden » NAME= »nom » definition Remarque History permet de simuler également les autres -
VALUE= »texte »>
INPUT touches de navigation de votre logiciel.
Tableau - -
Propriété name – value – type -
9.3.18 Image
Méthode eval – toString – valueOf -
Se rapporte à form - Nom Définition Voir aussi
Evénement - - Image L’objet image peut être manipulé en JavaScript images
Exemple <FORM NAME=form3> comme avec la balise
<INPUT TYPE="hidden" NAME="quelconque"
VALUE="Caché">
Syntaxe imageName = new Image([width, height]) -
<INPUT TYPE="texte" NAME="surprise"> imageName.propertyName
<INPUT TYPE="button" Value="voir champ Tableau document.image[numero|length] -
caché" NAME="bouton" Propriété border - complete - height - hspace - lowsrc - name -
onClick="document.form3.surprise.value=docum - prototype - src - vspace - width
ent.form3.quelconque.value"> Méthode eval – toString – valueOf -
</FORM> Se rapporte à document -
Remarque - - Evénement onAbort onError onLoad -
Exemple <SCRIPT>
delai = 100
Numero = 0
9.3.17 History MonImages = new Array()
Nom Définition Voir aussi for(i = 0; i < 10; i++) {
MonImages[i] = new Image()
history Permet de récupérer la liste des précédentes - MonImages[i].src = "gif/" + i + ".gif"
pages visitées par le navigateur }
Syntaxe history.propertyName - - function animate() {
document.animation.src =
history.methodName(parameters) MonImages[Numero].src
Tableau history (3) - Numero++
Propriété length - if(Numero>= 10) {
Numero = 0
Méthode back – forward – go - }
current – next – previous (Version 3) }
Se rapporte à document - </SCRIPT>
<BODY BGCOLOR="white">
Evénement - - <IMG NAME="animation" SRC="gif/0.gif""
onLoad="setTimeout('animate()', delai)">
Remarque Version 1.1 -
Page 68 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
Références
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 69
Références
9.3.24 Option
9.3.26 Plugin
Nom Définition Voir aussi
Nom Définition Voir aussi
option Objet d’un champs SELECT -
Plugin donne la liste des plugins installé sur le navigateur -
Syntaxe selectName.options -
Syntaxe navigator.plugins[index].propertyName -
selectName.options[index]
navigator.plugins[pluginIndex][mimeTypeIndex].mi
selectName.options.length
meTypePropertyName
Tableau - -
Tableau navigator.plugins[index] -
Propriété - -
Propriété description – filename – length - name -
Méthode - -
Méthode eval – toString – valueOf -
Se rapporte à - -
Se rapporte à navigator -
Evénement - -
<FORM Name=form4> Evénement - -
Exemple <SCRIPT>
<SELECT NAME="choix" Exemple
onChange="form4.resultat.value+=form4.choix. for (i=0; i < navigator.plugins.length; i++)
options[form4.choix.selectedIndex].value"> {
<OPTION VALUE="Aller "> Aller
<OPTION VALUE="Retour "> Retour document.writeln(navigator.plugins[i].name,
<OPTION VALUE="Séjour ">Séjour navigator.plugins[i].description,
</SELECT>
<INPUT TYPE=TEXTE SIZE=15 NAME="resultat"> navigator.plugins[i].length)
</FORM> }
</SCRIPT>
Remarque - -
Remarque Version 1.1 -
Page 70 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
Références
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 71
Références
Page 72 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
Références
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 73
Références
Page 74 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
Références
Page 76 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
Références
Page 78 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
Références
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 79
Références
Page 80 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript
Références
(0=dimanche)
Nom Dépend de Syntaxe Description Nom Dépend de Syntaxe Description
parseFloat interne parseFloat(chaine) analyse une setHours Date Date.setHours(valeur) Positionne l'heure
chaîne de de la journée de la
caractères et date concernée (0
retourne sa valeur à 23)
virgule flottante setMinutes Date date.setMinutes(valeur) positionne la
parseInt interne parseInt(chaine [,base]) retourne la valeur minute de l'heure
entier de la chaîne de la date
de caractères dans concernée (0 à 59)
la base indiquée setMonth Date date.setMonth(valeur) positionne le mois
pop array nomdutableau.pop() supprime le de la date
dernier élément du concernée (0 à 11)
tableau et retourne setSeconds Date Date.setSeconds(valeur) positionne la
sa valeur seconde de la
Pow Math pow(base, exposant) retourne base minute de la date
puissance concernée (0 à 59)
exposant setTime Date Date.setTime(valeur) Positionne l'heure
prompt window prompt(message, affiche une fenêtre dans la valeur
[valeurpardefaut]) de saisie avec un Numérique
message et la correspondante
valeur par défaut setTimeout frame - valeur=setTimeout(expression, évalue expression
initialisée window msec) après un delai
push array nomdutableau.push(element1,.. ajoute les d'attente de
,elementn) éléments donnés msec.valeur
en argument au permet d'arrêter
tableau l'évaluation avec la
random Math Math.random() Retourne une méthode
valeur aléatoire clearTimeout
entre 0 et 1 setYear Date date.setYear(valeur) positionne le
round Math round(nombre) retourne l'entier le nombre d'années
plus proche de la écoulées depuis
valeur donnée en 1900
argument shift array nomdutableau.shift() retourne le
select password - objet.select() sélectionne la premier élément
text - zone de saisie de du tableau et
textarea l'objet supprime celui-ci
correspondant du tableau
setDate Date Date.setDate(valeur) Positionne le jour sin Math Math.sin(angle) retourne le sinus
du mois de la Date de l'angle donné
concernée (entier en radian
de 1 à 31)
setDay Date Date.setDay(valeur) positionne le jour
de la semaine de
la date concernée
Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript Page 81
Références
Page 82 Institut Universitaire de Technologie d’Amiens • Support de cours, Année 2002/2003 • JavaScript