Cours L1 JavaScript Partie 1
Cours L1 JavaScript Partie 1
On place généralement le maximum d'éléments Pour écrire des commentaires, Javascript utilise
du script dans la balise d'en-tête (ce sont les les conventions utilisées en lange C/C++
éléments située entre les balises <HEAD> et
</HEAD>). Les évènements Javascript seront • Pour mettre en commentaires tout une
quant à eux placés dans le corps de la page ligne on utilise le double slash:
(entre les balises <BODY> et </BODY>) comme // Tous les caractères derrière le // sont
1
• soit de façon implicite, en écrivant
ignorés directement le nom de la variable suivie du
• Pour mettre en commentaire une partie caractère = et de la valeur à affecter:
du texte (éventuellement sur plusieurs chaine= "bonjour"
lignes) on utilise le /* et le */: Le navigateur détermine seul qu'il s'agit
/* Toutes les lignes comprises entre ces d'une déclaration de variable.
repères
Sont ignorées par l'interpréteur Même si une déclaration implicite est tout à fair
de code */ reconnue par le navigateur, il est tout de même
plus rigoureux de déclarer les variables de façon
Il faut veiller à ne pas embriquer des explicite avec le mot var...
commentaires, au risque de provoquer
une erreur lors de l'exécution du code! Portée (visibilité) des variables
2
• \b : touche de suppression
• \f : formulaire plein
• \n : retour à la ligne
• \r : appui sur la touche ENTREE
• \t : tabulation
• \" : guillemets doubles
• \' : guillemets simples
• \\ : caractère antislash
Booléens (booleans)
x = nom_de_la_chaine.length;
x = ('chaine de caracteres').length;
3
Méthode Description Exemples
Chaine = 'Comment ça marche?'
• var Resultat =
Retourne le caractère situé à la [Link]("Comment ça
chaî[Link](position)
position donnée en paramètre marche?", 1)
donne 'o'
• var Resultat =
Retourne la position d'une sous-chaîne [Link](Sous_Chaine,
(lettre ou groupe de lettres) dans une 6)
indexOf(sous-chaîne,
chaîne de caractère, en effectuant la donne '11'
position)
recherche de gauche à droite, à partir • var Resultat =
de la position spécifiée en paramètre. [Link](Sous_Chaine,
12)
donne '-1'
• var Resultat =
[Link](Sous_Cha
La méthode retourne la sous-chaîne
ine, 6)
substring(position1, (lettre ou groupe de lettres) comprise
donne '-1'
position2) entre les positions 1 et 2 données en
• var Resultat =
paramètre.
[Link](Sous_Cha
ine)
donne '11'
• var Resultat =
Convertit tous les caractères d'une
toLowerCase() [Link]
chaîne en minuscule
donne 'comment ça marche?'
D'autres methodes
Méthode description
Correspond à la balise HTML <A name="
">.
Transforme le texte en ancrage
anchor(nom_a_donner) var dmc="alias";
HTML
[Link]([Link]("Nom"));
var dmc="alias";
big() Augmente la taille de la police
[Link]([Link]());
Transforme la chaîne en texte
blink()
clignotant
bold() Met le texte en gras (balise <B>) var dmc="alias";
[Link]([Link]());
5
La méthode alert()
6
La méthode prompt()
else if (resultat > 30)
La méthode prompt fournit un moyen simple de alert("Votre entrée : " + resultat + " est
récupérer une information provenant de supérieure à 30")
l'utilisateur, on parle alors de boîte d'invite. La else
méthode prompt() requiert deux arguments: alert("Votre entrée : " + resultat + " est égale à
30")
• le texte d'invite </script>
• la chaîne de caractères par défaut dans le </body>
champ de saisie </html>
showModalDialog()
8
7. STRUCTURE DU JAVASCRIPT - L'instruction SWITCH
Le javascript a une structure de programmation L'instruction SWITCH est une variante de ELSE
proche du langage C, moins riche naturellement. IF mais elle reste moins souple car elle n'accepte
que des égalités.
- Grouper des instructions
var x = 10;
Comme en C, les instructions sont regroupées par switch (x){
les accolades { et }. Dans un script, il doit y avoir case 2 : alert("2 "); break;
autant d'accolades ouvertes que d'accolades case 4 :alert("4"); break;
fermées. case 10 :alert("10");break;
Le groupement d'instructions est utile. Il permet default :alert("nul");
par exemple de regrouper les instructions d'une }
fonction :
function somme(a,b) { - Les structures de boucles
var sum=a+b;
return sum; Comme en C, le javascript reconnaît les boucles
} itératives et les boucles conditionnelles.
Cette fonction inutile retourne la somme de deux Les boucles itératives
paramètres. Une boucle itérative exécute un groupe
d'instructions tant que le compteur d'itérations n'a
- Le test conditionnel pas atteint une valeur donnée.
Voici la syntaxe générale
Test simple
L'instruction if permet de diriger l'exécution du for(initialisation;condition;opération) {
script suivant le résultat d'un test. // Vos instructions
Il y a 2 moyens d'utiliser if. }
Si l'action à réaliser tient en une instruction :
Initialisation permet d'initialiser la valeur du
if (age<18) alert("Vous devez être majeur"); compteur.
Condition teste si le compteur a atteint la valeur
Ici, si l'âge du visiteur est inférieur à 18 ans, un limite. Si condition est vraie, la boucle continue.
message est affiché. operation permet d'incrémenter le compteur à
chaque passage de la boucle.
Si l'action à réaliser tient en plusieurs
instructions : Voici quelques exemples concrets.
if (age<18) { Faire une boucle pour i variant de 0 à 100 inclus
alert("Vous devez être majeur"); par pas de 1
[Link]="mineur.php3"; for (var i=0; i<=100; i=i+1)
}
Faire une boucle pour i variant de 10 à 0 inclus
Ici, si l'âge du visiteur est inférieur à 18 ans, un par pas de -1
message est affiché et le visiteur est redirigé vers for (var i=10;i>0;i=i-1)
la page mineur.php3.
Voici une application mathématique. Il s'agit de
Test Si - Sinon calculer la somme des nombres de 1 à N.
Entrez N dans le champ texte et cliquez sur le
Reprenons notre dernier exemple : bouton :
if (age<18) { N=
alert("Vous devez être majeur"); La fonction qui calcule cette somme est déclarée :
[Link]="mineur.php3"; function somme(N) {
} else { var sum=0;
[Link]="majeur.php3"; for (var i=1;i<=N;i=i+1) {
} sum=sum+i;
Ici, si le visiteur est mineur, il est redirigé vers }
mineur.php3, sinon il est redirigé vers la page alert("Somme de 1 à "+N+" = "+sum);
majeur.php3. }
9
for (i=2; i<10; i++){
Astuces d'écriture switch (i){
Le javascript reprend du C la syntaxe particulière case 2 : [Link]("c'est un deux");
pour les additions et soustractions. break;
Ainsi, écrire a=a+1; est équivalent à a++;
Et a=a-1; est équivalent à a--; case 8 : [Link]("c'est un huit");
break;
Dans la même idée, on peut aussi remplacer default : [Link]("valeur" +i +"<BR>");
a=a+5; par a+=5; }
}
Vous trouverez donc souvent les boucles for avec
cette syntaxe :
for(var i=0;i<100;i++) - Les boucles conditionnelles
Il est ainsi possible d'utiliser des balises HTML à Dans cette hiérarchie, les descendants d'un objet
l'intérieur même de la méthode write: sont des propriétés de ces objets mais peuvent
[Link]('<font aussi être des objets qui contiennent eux même
color="#FF0000">Bonjour</font>'); des propriétés...
Voyons voir à quoi ressemble cette hérarchie:
Lorsque nous écrivons en javascript du texte dans
la page, nous pouvons formater le texte en gras,
italique..., à la seule condition que la chaîne à
formater soit de type String().
Pour cela, vous devez utiliser la méthode
javascript toString() ou String().
La méthode writeIn
11
Niveau1 Niveau2 Niveau3 Commentaire Comment accéder à un objet?
navigator Informations sur le
Pour accéder à un objet du navigateur, il faut
browser utilisé
parcourir la hiérarchie du navigateur, en partant
window Gestion de la fenêtre du sommet (l'objet window), puis en parcourant
d'affichage tous les maillons jusqu'à atteindre l'objet désiré.
parent, Désignation de la sous- La syntaxe est
frames, self, fenêtre window.objet1.objet2.objet3.objet_vise .
top
Pour accéder modifier une propriété de l'objet visé
location Informations sur
l'emplacement de la
il suffit de rajouter un point, puis le nom de la
page propriété. Certaines propriétés sont modifiables,
c'est-à-dire que dynamiquement on va pouvoir
history Accès à l'historique modifier un élément (du texte, une image, ...).
(sites précédemment Certaines propriétés sont par contre en lecture
visités) seule, c'est-à-dire qu'elles permettent uniquement
document Informations sur le de récupérer des informations mais qu'on ne peut
contenu de la fenêtre pas les modifier...
(éléments qui
composent la page) 10. L’OBJET WINDOW
images Référence des images
présentes dans la page L'objet window est l'objet par exellence dans
Javascript, car il est le parent de chaque obet qui
forms Référence des
compose la page web, il contient donc:
formulaires présents
dans la page
• l'objet document: la page en elle-même
links Référence des liens • l'objet location: le lieu de stockage de la
présents dans la page page
anchors Référence des • l'objet history: les pages visitées
ancrages présents précédemment
dans la page • l'objet frames: les cadres (division de la
fenêtre en sous-fenêtres)
12
</form>
nombre de cadres (nombre
length Lecture seule
d'éléments du tableau frames
nom de la fenêtre dans laquelle
name Lecture seule
on se trouve
Il s'agit de la fenêtre qui englobe
Lecture seule,
parent celle dans laquelle on se trouvecontient des
(si il y en a une..) propriétés
Lecture seule,
Synonyme de la fenêtre actuelle
self contient des
(redondance ou précision?)
propriétés
[Link]="Vous êtes sur le
non, modifiable à tout
Il s'agit d'un message temporaire site de DMC";
moment, vous devez
qui s'affiche dans la barre d'état
status retournez la valeur
du navigateur suite à un Pour supprimer le texte dans la barre
true pour l'utiliser
événement des statuts :
avec onMouseOver
[Link]="";
Il s'agit de la fenêtre de plus haut Lecture seule,
Top niveau, celle qui contient tous les contient des
cadres (frames) propriétés
Lecture seule,
Window Il s'agit de la fenêtre actuelle... contient des
propriétés
bgColor récupérer et de modifier la :
couleur de fond de votre page [Link] = "#993333";
HTML.
lastModified savoir quand la page HTML a été [Link];
modifiée.
13
Les méthodes de l'objet window Affiche ou non les ascenceurs
scrollbars = yes/no
(barres de défilement)
L'objet window possède des méthodes relatives à status = yes/no Affiche ou non la barre d'état
l'ouverture et à la fermeture des fenêtres. toolbar = yes/no Affiche ou non la barre d'outils
width = largeur (en
Une méthode est une fonction associée à un Définit la largeur
pixels)
objet, c'est-à-dire une action que l'on peut faire
exécuter à un objet.. Une méthode s'appelle un height = hauteur (en
Définit la hauteur
peu comme une propriété, c'est-à-dire de la pixels)
manière suivante: Position verticale en pixels sur
Top (en pixels)
l'écran
[Link]() Popup en plein écran (version
Fullscreen (yes/no)
5 et +)
Par exemple,
- Les méthodes alert(), confirm() et prompt() open("[Link]");
open("[Link]", "target");
Les méthodes alert(), confirm() et prompt() sont open("", "");
des méthodes qui font apparaître une boîte de open("[Link]", "target", "toolbar=yes,
dialogue. directories=yes, status=yes, menubar=yes,
width=100, height=100, scrollbars=yes,
location=yes, resizable=yes") ;
var Nom_fenetre = [Link]("_page.html",
"cible", "width=100, height=100");
- Les méthodes open(), et close() var Nom_fenetre = [Link]("[Link]",
"cible", "top=100, left=100");
Les méthodes open() et close() sont bien var Nom_fenetre =
évidemment destinées à permettre l'ouverture et [Link]("_page.html" ,"cible" ,"width=200,
la fermeture de fenêtres. Toutefois la syntaxe de height=200, resizable=yes, scrollbars=yes,
la méthode open() est longue car elle admet un menubar=yes, status=no, location=yes,
nombre important de paramètres: toolbar=yes");
La méthode open() permet d'ouvrir une nouvelle
fenêtre popup, voici sa syntaxe: Si vous voulez ouvrir une fenêtre virtuelle ne
[Link]("URL",["nom_de_la_fenetre"], mettez rien à l'emplacement de la page :
["options_de_la_fenetre"]); var Nom_fenetre = [Link]("", "cible",
"width=100, height=100, _les_autres_attributs");
La méthode javascript open() est composée de
trois parties : Quelques exemples de combinaisons
- la page à ouvrir (url), l'url de la page qui sera d'options :
affichée dans la nouvelle fenêtre
- la cible (target. _self , _blank.....) Popup positionné avec Position fixe en haut à
- ces caractéristiques (attributs). gauche :
OuvrirPopup('[Link]','','top=10,left=10')
Il est préférable de l'associer à une variable, ce
qui nous permettra de manipuler la pop up: Popup minimaliste avec Aucune barre de menu,
var m = open("[Link]","target","options"); non redimensionnable, taille fixe :
Les options de la fenêtre sont les suivantes: OuvrirPopup('[Link]', '', 'resizable=no,
location=no, width=200, height=100, menubar=no,
Option description status=no, scrollbars=no, menubar=no')
Affiche ou non les boutons de Popup fullscreen avec Page en plein écran
directory = yes/no
navigation (version 5 et +). Faire un ALT [F4] pour fermer la
Affiche ou non la barre fenêtre :
Location = yes/no
d'adresse OuvrirPopup('[Link]','','fullscreen=yes')
Affiche ou non la barre de menu
menubar = yes/no
(fichier, edition, ...) Voici la fonction javascript qui ouvre un popup
Définit si la taille de la fenêtre pour tous ces exemples :
resizable = yes/no
est modifiable ou non
14
<SCRIPT language=javascript> Pour un lien hypertexte, le code sera:
function OuvrirPopup(page,nom,option) { <A href="#"
[Link](page,nom,option); onClick="[Link]('nom_de_la_fenetre_');return(f
} alse)">Cliquez ici pour fermer la fenêtre</A>
</SCRIPT>
Pour un bouton (image), le code sera:
<A href="#"
• les options doivent être saisies les onClick="[Link]('nom_de_la_fenetre_');return(f
unes après les autres, séparées par alse)"><img src="nom_de_l_image"></A>
des virgules, sans espace
Il est bien évidemment possible d'utiliser cette
• l'ensemble des options doit être procédure avec tous les gestionnaires
encadré par les guillemets d'événement, en utilisant par exemple une
syntaxe proche de celle-ci:
Chacune des fenêtres doit cependant être fermée, <A href="#"
il faut donc se servir de la méthode close() qui onMouseOver="[Link]('nom_de_la_fenetre_');"
permet de fermer une fenêtre. ><img src="nom_de_l_image"></A>
15
LES AUTRES METHODES DE L’OBJET WINDOW
function fermer_window()
{ [Link](); }
</script>
</head>
<body bgcolor="#FFFFFF">
<input type="button" value="Ouvrir" onclick="ouvrir()"
title="Ouvrir" /> <br/>
<input type="button" value="fermer la fenetre popup"
onclick="fermer_popup() »> <BR>
<input type="button" value="fermer la fenetre en cours"
onclick="fermer_window()” >
</body>
</html>
: [Link]() <A href="javascript:[Link]()">Cacher la fenêtre</A>
Enlève le focus à la fenêtre
Rend la fenêtre invisible, en arrière plan en lui
supprimant le focus.
16
[Link](String code, Integer delai) <SCRIPT language=javascript>
function Horloge() {
Lance un traitement à intervalle régulier var dt=new Date();
[Link]=[Link]()+":"+[Link]()
[Link](Object timer) +":"+[Link]();
}
Arrête l'exécution d'un traitement timer var timer=setInterval("Horloge()", 1000);
précédemment défini avec setInterval(). </SCRIPT>
<A href='javascript:clearInterval(timer)'>Arrêter l'horloge</A>
timerID =
setTimeout("fonction()",millisecondes); Exemple2 :
Déclenche une minuterie et appelle le code
javascript fonc dans delai millisecondes <html><head><title>set & clearTimeout</title>
pour lancer la fonction "fonction( )" après un <script language="JavaScript">
délai de "millisecondes' :
var timerId=""; //Identificateur du temporisateur
clearTimeout(timerId); var tim2Id="";
Pour arrêter le lancement de la fonction avant var marche=false;
expiration du délai :
function Temporisation(){
if(!marche) {
Exemple1 Minuterie simple qui affiche timerId=setTimeout("Alarme3s()",3000);
l'heure tim2Id=setTimeout("Arret()",3000);
dans la barre de status. marche=true;
}
<SCRIPT language=javascript> else {
function Timer() { clearTimeout(timerId);
var dt=new Date() clearTimeout(timer2Id);
[Link]=[Link]() marche=false;
+":"+[Link]()+":"+[Link](); }
setTimeout("Timer()",1000); }
} function Arret(){marche=false;}
Timer(); function Alarme3s(){alert("3 secondes se sont écoulées.")}
</SCRIPT> </script>
</head>
17
[Link](x,y) Nous allons créer un bouton pour déplacer la fenêtre.
Dans la balise HTML ou XHTML script :
Déplacer la fenêtre. function change(){ [Link](-10,10);
- x, valeur de type Number positive ou }
négative en pixel.
- y, valeur de type Number positive ou Dans la balise HTML ou XHTML body :
négative en pixel. <form>
x, y sont le nombre de pixels dont va se <input type="button" value="changer"
déplacer le coin haut gauche de la fenêtre. onclick="change()">
</form>
[Link](x,y) Exemple 1
Exemple 2
<SCRIPT language=javascript>
function TailleFenetre(deltaX, deltaY) {
[Link](deltaX, deltaY);
}
</SCRIPT>
<A href="javascript:TailleFenetre(-10,0)">Réduire la largeur
de la fenêtre</A>
L'objet history est une popriété de l'objet Les propriétés et les méthodes de l'objet
document. Il contient l'historique du navigateur, history
c'est-à-dire l'ensemble des URL (adresses des
pages) visitées par l'utilisateur. Ces adresses sont Les propriétés et les méthodes de l'objet history
accessibles par le navigateur en cliquant sur les sont peu nombreuses, elles peuvent néanmoins
boutons suivants et précédent. L'objet history offre être très utile pour aider à la navigation.
des objets et des méthodes qui permettent de
18
• la propriété length permet de connaître le possible d'entrer une chaîne de caractères
nombre d'objets dans l'historique en paramètre, auquel cas le navigateur
• la méthode back permet d'aller à l'URL cherchera la page de l'historique la plus
précédent dans l'historique proche contenant cette chaîne
• la méthode forward permet d'aller à l'URL
suivant dans l'historique Par exemple,
• la méthode go(variable) permet d'aller à
un des URL de l'historique. Le paramètre <input type="button" value="Back"
variable est un nombre entier (positif ou Onclick="javascript:[Link]()">
négatif) qui détermine le nombre de pages <input type="button" value="Actualiser"
relatif auquel se trouve l'URL désiré. Il est Onclick="javascript:[Link](0)">
L'objet navigator est un objet qui permet de récupérer des informations sur le navigateur qu'utilise le
visiteur. Toutes les propriétés de l'objet navigator sont en lecture seule, elles servent uniquement à
récupérer des informations et non à les modifier .
Les propriétés de l'objet navigator sont peu nombreuses, elles permettent en fait de retourner des portions
de l'information sur votre navigateur qui est en fait une chaîne de caractères.
Les navigateurs ne supportent pas tous le Javascript de la même façon, ainsi, suivant les instructions
Javascript que l'on utilisera (suivant qu'il s'agit de Javascript 1.0, 1.1, ou 1.2) il faudra exécuter des
instructions différentes. Par respect pour vos visiteurs il est généralement bon de mettre en début de script
une fonction qui permet de déterminer la version du navigateur (et/ou sa marque) et exécuter les
instructions appropriées en fonction du résultat.
19
Voici une grille avec les navigateurs, les valeurs de propriétés et quelques fonctionalités associées à ceux-
ci:
Il est parfois bon de pouvoir exécuter un ensemble d'instructions différent selon que le navigateur utilisé est
Netscape Navigator ou Microsoft Internet Explorer, voici un exemple de petit script permettant la distinction:
[Link]([Link]);
// Version = [Link];
Nom = [Link];
if (Nom == 'Netscape') {
placer ici les instructions à exécuter s'il s'agit de Netscape Navigator 4 ou supérieur
}
Une méthode améliorée si jamais on a souvent besoin de faire le test de navigateur, car l'accès à l'objet
navigator n'est effectué qu'une seule fois. Ensuite deux variables booléenne sont utilisées, et le test
consiste uniquement à regarder si la variable contient 1 au 0 et le navigateur n'a pas besoin de comparer la
chaine nom à chaque test de navigateur...
Nom = [Link];
ns = (Nom == 'Netscape') ? 1:0
ie = (Nom == 'Microsoft Internet Explorer') ? 1:0
if (ns) {
placer ici les instructions à exécuter s'il s'agit de Netscape Navigator 4 ou supérieur
}
if (ie) {
placer ici les instructions à exécuter s'il s'agit de Microsoft Internet Explorer 4 ou supérieur
}
Imaginons que l'on veuille maintenant afficher du DHTML (HTML dynamique, c'est-à-dire dont les objets
peuvent bouger et être modifiés à loisir...), il faut alors vérifier que les versions des navigateurs sont
supérieures à 4 (seuls Netscape Navigator 4 (ou supérieur) et Microsoft Internet Explorer 4 (ou supérieur)
le supportent.
20
Voici le script permettant de vérifier que les versions sont supérieures à 4:
Nom = [Link];
Version = [Link];
ns4 = (Nom == 'Netscape' && Version >= 4 ) ? 1:0
ie4 = (Nom == 'Microsoft Internet Explorer' && Version >= 4 ) ? 1:0
if (ns4) {
placer ici les instructions à exécuter s'il s'agit de Netscape Navigator 4 ou supérieur
}
if (ie4) {
placer ici les instructions à exécuter s'il s'agit de Microsoft Internet Explorer 4 ou supérieur
}
21
alert([Link]); comme valeur :
//140 - un chaîne de caratère (String).
[Link]["identifiant"].alt="blabal";
La propriété javascript
[Link]["identifiant"].width renvoie Attention, l'attribut alt ne peut être changée (sauf
une valeur de type Number dont l'unité est le dans les navigateurs récents, Firefox, Internet
pixel. explorer >5.5).
onChange : l’utilisateur après avoir cliqué sur une zone de formulaire la quitte après
avoir changé son contenu
Est utilisé sur l'objet javascript form
Est utilisé sur la balise HTML input, textarea, select
onLoad : une page est chargée par le navigateur (pour les images IMG aussi)
onMouseOver : la souris passe sur un lien hypertexte
onSelect : l’utilisateur sélectionne un champ élément d’un formulaire
Est utilisé sur l'objet javascript form
Est utilisé sur la balise HTML input, textarea
23
En Javascript 1.2, les attributs suivants ont été rajoutés :
onMouseOut : le pointeur quitte un lien
onMouseDown, Quand le bouton de la souris est appuyé.
onMouseMove, onMouseOut Quand le curseur bouge.
onMouseUp, Quand le bouton de la souris est relâché.
onDblClick : Quand je sors du lien.
Exemple 1 :
<FORM><INPUT VALUE=onBlur
24
onBlur= "alert(‘onBlur de la zone’) "> onClick="[Link]='[Link]'";>
l’utilisateur après avoir cliqué sur une zone clique </FORM>
à l’extérieur de la zone active.
[<I>cliquez sur onBlur puis n’importe où à
Exemple 3 :
l’extérieur de la zone</I>] </FORM>
Exemple 3.1.
Exemple 2 :
<FORM>
Exemple 2.1.
<INPUT VALUE=onChange onChange=
<A HREF="#fin " onClick="alert('onClick sur le "alert(‘on Change du texte’) ">
lien') "> onClick </A>
l’utilisateur aprés avoir cliqué sur une zone, la
l’utilisateur clique sur une zone hypertexte. <BR> quitte aprés avoir changé le texte.<BR>
[<I>cliquez sur onChange, modifiez le texte puis
[<I>cliquez sur onClick</I>] cliquez à l’extérieur de la zone</I>]
</FORM>
Exemple 2.2.
Exemple 3.2.
<a href= "[Link] " onclick= "return
confirm('Etes-vous sûr de vouloir regarder cette Dans cet exemple, nous allons modifier
page ?'); ">Regardez cette exemple onClick</a> dynamiquement le contenu d'une liste déroulante.
La première liste est classique et le contenu de la
Exemple 2.3. seconde est réaffecté dès que l'on agit sur la
<FORM> première :
<INPUT TYPE="button"
VALUE="Back" onClick="[Link]()"> Préparation d'un formulaire
</FORM>
La première liste du formulaire est créee en HTML
Exemple 2.4. Ouvre une fenetre
pur et dur et est nommée sur cet exemple,
Rubrique. On l'accompagne toutefois de
<FORM>
l'événement onChange qui va déclencher la mise
<INPUT TYPE=BUTTON
à jour de la deuxième liste, Page :
VALUE="Cliquez ici pour ouvrir une petite
fenetre !"
<SELECT NAME="Rubrique"
onClick="PetiteFenetre()">
onChange='Choix([Link])'>
</FORM>
<OPTION>-- Choisissez une rubrique
---</OPTION>
Javascript
<OPTION>Plongée</OPTION>
function PetiteFenetre()
<OPTION>Nucléaire</OPTION>
{
<OPTION>Bonheur</OPTION>
msg=open("","DisplayWindow","width=250,height
</SELECT>
=100,scrollbars=no");
[Link]("...Début du code HTML..."+
"<P>Pour fermer cette fenêtre,<BR>cliquez à La seconde liste est quasiment vide à la création,
l\'intérieur.</P>" + car son contenu dépendra de la sélection faite
"<FORM NAME='Formulaire'><INPUT dans la première liste :
TYPE=text NAME='ZoneTexte'" +
" onBlur='[Link]()'></FORM> <SELECT NAME="Page">
<SCRIPT>" + <OPTION>-- Choisissez une page ---</OPTION>
"[Link](); <OPTION></OPTION>
</SCRIPT>"+ "...fin du code HTML..."); <OPTION></OPTION>
[Link](); <OPTION></OPTION>
} </SELECT>
Exemple 2.4. Ouvre une nouvelle page
<FORM>
<INPUT
TYPE=button
VALUE="Lien vers... "
25
La fonction qui travaille <OPTION
VALUE="[Link]
La fonction Choix() sera déclarée dans l'en-tête </SELECT>
de la page, comme d'hab' et effectuera les tâches </FORM>
suivantes :
La fonction JavaScript :
• Repérer la sélection de la première liste
• Ne pas réagir si on sélectionne le 1er La fonction Lien() doit être placée dans l'entête de
élément la page (quelque part entre les balises <HEAD> et
• Créer un tableau d'options </HEAD>).
• Ecrire les nouvelles options dans la liste
function Lien() {
function Choix(form) { i = [Link];
i = [Link]; if (i == 0) return;
if (i == 0) { url =
return; [Link][i].value;
} [Link] = url;
switch (i) { }
case 1 : var txt = new Array
('Materiel','Poissons','Sécurité'); break; Exemple 4 de code :
case 2 : var txt = new Array
('Radioactivite','Information','Mesures'); break; Exemple 4.1.
case 3 : var txt = new Array
('Philosophie','Psychologie','Humour'); break; <FORM>
} <INPUT VALUE=onFocus onFocus=
[Link] = 0; "alert(‘onFocus sur la zone’) ">
for (i=0;i<3;i++) {
L’utilisateur clique sur une zone. <BR>
[Link][i+1].text=txt[i];
} [<I>cliquez sur onFocus</I>] </FORM>
}
Exemple 4.2
<FORM>
Exemple 3.3.
Nom <input type = ="text"" name ="nom "
onkeyPress ="passer_focus()"; > <BR>
Cet exemple est d'utiliser l'attribut VALUE de Prenom <input type = ="text"" name ="prenom"
l'élément OPTION pour accueillir l'adresse du lien. > <BR>
Dès qu'on clique sur une des options de la liste, la </FORM>
fonction Lien() consulte cette valeur et l'envoie au
navigateur pour qu'il charge la page. Javascript
function passer_focus()
Le formulaire : {
if( ( [Link] == 13) || ([Link] == 13 ) )
Le code HTML du formulaire doit être placé dans {
le corps du document (quelque part entre les [Link][0].[Link]();
balises <BODY> et </BODY>). Ce formulaire ne [Link]=0 ;
contient qu'un seul élément (SELECT). La }
validation du formulaire est automatiquement }
générée par le choix d'une option, grâce à Exemple 5 de code :
l'événement onChange.
26
Exemple 5.2. Cet exemple permet de modifier le <body>
contenu de la zone multiligne au passage <a href="#"
de la souris onMouseOver="document.img_1.src='[Link]';
"
<FORM NAME="Info"><BR>
onMouseOut="document.img_1.src='[Link]';">
<TEXTAREA NAME="Texte"
<img name="img_1" src="[Link]"> </a>
ROWS="8"
</body>
COLS="40"
</html>
WRAP="physical"">Passez la
souris...</TEXTAREA>
2. Clignotement du texte
</FORM>
Et pour chaque lien :
<html><!-- Du texte qui clignote -->
<A HREF="[Link]"
<head>
onMouseOver="[Link] ='Bla,
<title>Clignotement</title>
bla, bla...">
<script language="JavaScript">
Texte du lien</a>
i=0;
function couleur()
Exemple 6 Evénement clavier
{
tabColoris = new Array
Exemple 6.1. Un alert lorqu’on appuie sur la
("#ffffff","#CE5852");// Vous pouvez changer les
touche Enter
couleurs ou en rajouter
if (i+1 == [Link]) i=0;
<FORM>
else i++;
Enter ENTER <input type = ="text"" name ="x1"
onkeyPress ="if ([Link] == 13)
[Link]("bienvenue").setAttribu
alert('Enter');" > <BR>
te('color',tabColoris[i]);
</FORM>
setTimeout("couleur()",500);
}
Exemple 6.2. N’autorise que la saisie de
</script>
nombres
</head>
<body topmargin="0" leftmargin="0"
function validerNombre()
onload="couleur()">
{
<p align="center"><font id="bienvenue"
If ( [Link] <45 || [Link] >45 )
size="8">Bienvenue</font></b></p>
// if( ( [Link] <45 || [Link] >45 ) )
</form>
{
</body>
[Link]=false ;
</html>
// return false
}
3. Clignotement d’image
}
Dans un formulaire, on a
ce petit script va vous permettre de faire clignoter
une ou plusieurs images dans une page web.
<FORM>Entrer un nombre
Remplacer les valeurs "500" par toute autre durée
<input type ="text" name = ="nombre "
en millisecondes pour déterminer la vitesse de
onkeyPress = ="return validerNombre() ;"
clignotement et utiliser les images de votre choix
>
en tenant compte de leur position dans le
</FORM>
document. Il s'agit ici de la première image
affichée puisque le numéro d'indice est "0".
L'image nommée "blank" est une image est soit
15. LES AUTRES EXEMPLES
transparente soit de 1 pixel X 1 pixel pour donner
l'impression qu'il n' y a rien.
1. Modification d'une image lors du passage
de la souris
<html>
<head>
<html>
<title>IMAGE CLIGNOTANTE</title>
<head>
<meta http-equiv="Content-Type"
<title>Modification d'une image lors du passage
content="text/html; charset=utf-8" />
de la souris</title>
<script type="text/javascript">
</head>
control=true;
</head>
27
function clignote()
{ for (count=0; count<10;count=count+1)
[Link][0].src="[Link]"; { msg=msg+""+msg; }
[Link]("clignote2();",500);
} function banniere() {
[Link]=[Link](po
function clignote2() sition,position+100);
{
if (control!=false) position = position+1;
{
[Link][0].src="[Link]"; if (position==100) position=0;
[Link]("clignote();",500); setTimeout("banniere()",100); }
}
} </script>
</head>
function stopit() <body OnLoad="banniere()">
{
control=false; <form name="affichage"> <input type="text"
} name="texte" size=30 value="" />
</form>
function doit() </body>
{ </html>
control=true;
clignote(); 5. Raffraichissement d’une page
}
</script>
- En HTML, pour auto-Reactualisation d'une
</head>
page HTML avec la balise meta
<body onLoad="clignote();">
<center>
<head>
<img src="[Link]" />
<meta http-equiv="refresh"
<br />
content="0;url=chemain_de_t_as_page.html" /
<input type="button" value="arrêter le
>
clignotement" onClick="stopit();" />
</head>
<br /> <br />
<input type="button" value="reprendre le
Le "0" indiquant un temps en seconde avant de
clignotement" onClick="doit();" />
rafraichir la page au moyen de l'URL fourni.
</center>
</body>
Par exemple pour rafraichir la page chaque
</html>
10 sec
4. Défilement de texte en javascript
<META HTTP-EQUIV="Refresh" CONTENT="10;
URL=[Link]
Ce script permet de faire défiler du texte dans une
boîte (à l'aide des balises form et input). A noter
que vous pouver changer la vitesse de défilement - En javascript,
en modifiant la ligne (valeur 100 à modifier : <A HREF="#"
setTimeout("banniere()",100);). Ci dessous la onclick="[Link]();return(false)"
boîte où va apparaître le message défilant. ><B>Rafraîchir</B></A>
<input type="button"
<!DOCTYPE HTML PUBLIC "-//W3C//DTD OnClick="javascript:[Link]()"
HTML 4.01 TRANSITIONAL//EN"> value="Actualiser">
<html>
<head> <FORM ACTION="" METHOD=POST>
<title>IMAGE CLIGNOTANTE</title> <P><INPUT TYPE=button NAME=Bouton
<meta http-equiv="Content-Type" VALUE="Actualiser maintenant"
content="text/html; charset=utf-8" /> onclick='[Link]="javascript:[Link]
()"'>
<script language="javascript"> </FORM></P>
var position=0;
var msg="Votre message ici";
28
16. LES FORMULAIRES Et grâce au JavaScript, il est possible de les
rendre très pratiques.
Introduction aux formulaires
Le javascript associé aux formulaire permet :
Les formulaires sont la base des échanges entre • d'assister et de guider le visiteur,
le site et le visiteur. • de contrôler la saisie,
JavaScript ne peut pas échanger d'information à • de faire des traitements (calcul,
partir de fichier texte ou de base de données. manipulation de chaînes de caractères),
Pour permettre au visiteur de transmettre des • d'envoyer les résultats au serveur.
informations, les formulaires sont indispensables.
Vue d'ensemble
Pour intégrer des éléments de formulaire, il faut encadrer les balises par <FORM> et </FORM>. .
La balise FORM, création de formulaire
La balise INPUT, la plus courante et tous ses types
type = TEXT, BUTTON, RADIO, CHECKBOX, HIDDEN, PASSWORD, SUBMIT et RESET.
La balise SELECT, la balise de liste
La balise TEXTAREA, la balise de zone de texte multi-lignes.
La balise FORM
La balise FORM a besoin de la balise de fin. Elles sont nécessaires pour afficher des éléments de
formulaire.
L'élément INPUT
Une zone de texte est définie par la balise INPUT avec un type "text".
<INPUT type="text">
Propriétés acceptées :
name | value | defaultvalue | size | maxlength | disabled, readOnly, class, style
Méthodes acceptées :
focus, blur
Evénements acceptés :
onFocus, onBlur, onChange
Propriétés acceptées :
name | value | defaultvalue | size | maxlength | disabled | readOnly | class | style
30
Méthodes acceptées:
focus | blur | click
Evénements acceptés:
onFocus | onBlur | onClick
L'événement le plus utilisé est onClick car il détecte le clic utilisateur.
Un groupe de radio-boutons est défini par la balise INPUT avec un type "radio".
Pour définir un groupe, il faut donner le même nom à tous les champs. Ainsi, la sélection sera unique pour
l'ensemble du groupe.
Ici, le groupe s'appelle "sexe". A l'origine, Homme est coché. Homme et Femme sont des états opposés.
Les radios-boutons sont adaptés.
Homme - Femme
<INPUT type="radio" name="sexe" value="homme" checked>Homme -
<INPUT type="radio" name="sexe" value="femme">Femme
Propriétés acceptées :
name | value | checked | disabled | readOnly | class | style
Méthodes acceptées:
focus | blur | click
Evénements acceptés:
onFocus | onBlur | onClick
Une case à cocher est définie par la balise INPUT avec un type "checkbox".
Contrairement aux cases à cocher, il n'y a pas d'exclusion entre les propositions.
Ici, Majeur et Etudiant sont coché à l'origine. Mais il est possible de n'être ni l'un, ni l'autre, ou l'un des
deux.
Majeur
Etudiant
<INPUT type="checkbox" name="majeur" checked>Majeur
<INPUT type="checkbox" name="etudiant">Etudiant
Propriétés acceptées :
name | checked | disabled | readOnly | class | style
Méthodes acceptées:
focus | blur | click
Evénements acceptés:
onFocus | onBlur | onClick
L'élément password
Password se présente comme un champ texte, mais affiche des * pour cacher le contenu du champ. Il est
aussi impossible de copier le contenu (CTRL+C). Il est donc adapté à la saisie de mot de passe.
A part cette différence d'affichage, il possède les mêmes propriétés que le champ texte.
L'élément caché
Un champ caché est destiné à transmettre des informations dans le formulaire, sans que le visiteur ne s'en
aperçoivent.
Cela peut être une adresse mail, un résultat de traitement, l'heure, un cookie ou toute autre information.
31
Naturellement, le champ n'apparaît pas : voici sa syntaxe.
<INPUT type="hidden" value="contenu caché" name="cache">
Propriétés acceptées :
name | value | defaultvalue
Naturellement, toutes les propriétés et les événements concernant son affichage et son apparence sont
sans effet.
REMARQUE : Même s'il n'apparaît pas à l'écran, son contenu reste manipulable en javascript.
Les boutons spéciaux RESET et SUBMIT
Ces boutons existent et il faut les décrire (Je préconise de les éviter).
Dans le formulaire suivant, changer les valeurs saisies et cliquez sur "RESET" :
Cochez moi !
Les listes
Les listes sont définies par la balise <SELECT>. Cette balise définie la zone de la liste. Les lignes de
contenu de la liste sont alimentées par la balises <OPTION>.
Voici la syntaxe générale pour créer une liste contenant des lignes :
<SELECT name="mono" size=1>
<OPTION value="1">ligne 1</OPTION>
<OPTION value="2">ligne 2</OPTION>
<OPTION value="3">ligne 3</OPTION>
<OPTION value="4">ligne 4</OPTION>
</SELECT>
L'élément OPTION
L'objet OPTION est assez simple. Il peut avoir comme attributs : name, value, selected.
selected force la sélection de cette occurence dans la liste.
32
Liste des méthodes :
add Ajoute un ligne (objet OPTION)
remove Supprime une ligne
focus Donne le focus à la liste
blur Reprend le focus
33
Nous avons vu les éléments de formulaire, comment les déclarer, les attributs et les comportements
possibles.
La page suivante montre comment les manipuler en javascript.
Principe général
Les éléments de formulaire sont des objets javascript .
Cette page présente l'accès par javascript aux objets du formulaire.
Supposons le formulaire suivant :
<FORM name="general">
<INPUT type="text" name="champ1" value="Valeur initiale">
</FORM>
1. Accéder au formulaire
Le formulaire est un élément de l'objet document. Pour accéder au formulaire general, il faut écrire :
• [Link]["general"]
ou
• [Link][0]
ou
• [Link]
forms est le tableau des formulaires de document. On peut accéder à un formulaire par son nom ou par son
indice (commençant à 0), via le tableau elements ou directement par son nom
2. Accéder à un élément
• [Link]["general"].elements["champ1"]
ou
• [Link]["general"].elements[0]
ou
• [Link]["general"].champ1
elements est le tableau de tous les éléments du formulaire. On peut accéder à un élément par son nom ou
par son indice, ou directement par son nom.
Remarques :
1. Il est préférable d'utiliser le nom des éléments, plutôt que les indices : les noms sont indépendants de
l'organisation du formulaire.
2. Les tableaux forms et elements peuvent sembler inutiles dans les exemples ci-dessus. Observez ce
script pour vous convaincre du contraire :
var nom_du_champ="champ1";
[Link]["general"].elements[nom_du_champ]
Ici, on peut accéder à un élément de formulaire dont le nom est contenu dans une variable javascript.
Une fois que l'élément est atteint, il est possible de manipuler ces propriétés.
Par exemple, pour placer dans la zone de texte le mot "NOUVEAU", il faut juste écrire :
[Link]["general"].elements["champ1"].value="NOUVEAU"
Cliquez sur ce bouton et observez le premier formulaire
Appeler une méthode sur un élément
Pour donner le focus au champ texte du haut de cette page, il faut appeler la méthode focus() sur cet
34
élément.
[Link]["general"].elements["champ1"].focus()
Un exemple d'événement
Un événement d'un élément de formulaire est déclenché par le navigateur en réaction à une action ou un
changement détecté.
L'événement le plus classique est le clic sur un bouton appelé onClick
Reprenons le même exemple, il s'agit de placer "NOUVEAU" dans la zone de texte du formulaire.
<FORM name="changer">
<INPUT type="text" name="zonetexte" value="Valeur initiale">
<INPUT type="button" value="Changer la zone de texte"
onClick=' [Link]["changer"].elements["zonetexte"].value = "NOUVEAU" '>
</FORM>
Dans le bouton, on a rajouté l'événement onClick qui reçoit le code javascript à exécuter lors du clic sur le
bouton.
La syntaxe est :
onClick=' [Link]["changer"].elements["zonetexte"].value = "Encore nouveau" '>
Le code javascript doit se mettre entre " ou entre '. Il faut faire très attention à alterner les " et '. On peut
écrire :
onClick='alert("Bonjour")'>
ou
onClick="alert('Bonjour')">
5. L'objet this
Il est fastidieux d'accéder aux éléments de formulaire par toute la chaîne [Link]. Un objet
JavaScript this permet de raccourcir ce chemin d'accès.
this représente l'objet javascript en cours.
Donnez le focus à cette zone de texte, un message apparaît dans la barre de statut pour indiquer son nom.
Le message disparaît quand le champ perd le focus.
Voici le code source simplifié par this :
35
<FORM name="formfocus">
<INPUT type="text" name="champtexte" value="contenu" onFocus="[Link]=[Link]"
onBlur="[Link]=''">
</FORM>
<FORM>
<INPUT type="text" name="zonedetexte" value="Valeur initiale">
<INPUT type="button" value="Changer le contenu"
onClick=' [Link]="NOUVEAU" '>
</FORM>
Grâce à [Link], on peut accéder au formulaire de l'élément en cours. Le chemin pour accéder à
zonedetexte est ensuite classique.
Un autre exemple
Les boutons
Un bouton sert principalement à déclencher une action javascript.
La propriété value contient le libellé du bouton. Comme pour une zone de texte, ce libellé est accessible.
Les radio-boutons
Imaginons ce sondage :
Vous utilisez comme système d'exploitation :
Windows 95 Windows 98 Windows NT Linux Autre
La gestion des radio-boutons est assez complexe. Voici le code HTML de ce sondage :
<FORM>
<INPUT type="radio" name="os" value="Windows 95" checked>Windows 95
<INPUT type="radio" name="os" value="Windows 98">Windows 98
<INPUT type="radio" name="os" value="Windows NT">Windows NT
<INPUT type="radio" name="os" value="Linux">Linux
<INPUT type="radio" name="os" value="Autre">Autre
<INPUT type="button" value="Tester"
onClick="testerRadio([Link])">
<SCRIPT language="javascript">
function testerRadio(radio) {
for (var i=0; i<[Link];i++) {
if (radio[i].checked) {
alert("Système = "+radio[i].value)
}
}
}
</SCRIPT>
La déclaration du formulaire crée un groupe de radio-boutons liés : le nom du groupe est os.
La fonction javascript a comme paramètre le groupe des radio-boutons.
Une boucle parcourt la liste des boutons du groupe. On repère le bouton qui a la propriété checked à true et
on affiche alors la valeur correspondante.
<select name="dmc">
<option value="Choix 1" selected> Choix 1 </option>
<option value="Choix 2"> Choix 2 </option>
<option value="Choix 3"> Choix 3 </option>
</select>
</form>
<script language="javascript">
function evaluation(){
var selectione="";
var Num=0;
for (i=0; i<[Link]; i++) {
if ([Link]. options[i].selected ) {
Num=Number(Num+1);
selectione = selectione+"; "+[Link][i].text;
}
}
alert(Num+" choix : "+selectione);
}
</script>
38
8.L'accès aux éléments de type TEXTAREA
Une zone de texte multi-lignes a comme propriété principale value qui contient le texte de la zone.
Contenu brut Contenu traité
Nous avons vu dans cette page comment manipuler les éléments de formulaires avec le javascript.
La page suivante montre les Trucs et astuces de formulaires qui facilitent la saisie dans les formulaires.
ASTUCES DE FORMULAIRE
2 - Changer le libellé d'un bouton
Cette page montre de nombreuses astuces pour Cliquez le bouton pour changer son libellé.
rendre un formulaire dynamique et attractif, en
réaction aux événements générés par l'utilisateur. Le script
Il est nécessaire de bien connaître le principe des <FORM name="form2">
formulaires HTML pour tirer partie de ces astuces. <INPUT type="button" name="bouton"
value='Cliquez-moi !'
1 - Donner le focus (curseur) à un élément de onClick="[Link]='Touché !'">
formulaire </FORM>
Le premier champ texte a le focus au chargement
de la page. 3 - Ne permettre qu'un seul clic sur un bouton
Cliquez sur les boutons pour donner le focus aux Accepte le premier clic sur le bouton et empêche
autres éléments. La prise de focus est possible les suivants.
pour tous les types d'objets. Utile pour éviter de recevoir 3 fois le même
message quand un visiteur s'excite sur le bouton
"Envoyer" !
Le script
Le script Dans l'entête de la page
<SCRIPT language="javascript">
<FORM name="form1"> var nbclic=0 // Initialisation à 0 du nombre de
<INPUT type="texte" name="champ1"> clic
<INPUT type="button" value="<- Donne le function CompteClic(formulaire) { // Fonction
focus" onClick="[Link]()"> appelée par le bouton
<SELECT name="champ2" > nbclic++; // nbclic+1
<OPTION>Ceci est la ligne n° 1</OPTION> if (nbclic>1) { // Plus de 1 clic
<OPTION>Ceci est la ligne n° 2</OPTION> alert("Vous avez déjà cliqué ce bouton.\nLe
</SELECT> formulaire est en cours de traitement... Patience");
<INPUT type="button" value="<- Donne le } else { // 1 seul clic
focus" onClick="[Link]()"> alert("Premier Clic.");
<TEXTAREA rows="2" cols="15" }
name="champ3"> }
<INPUT type="button" value="<- Donne le </SCRIPT>
focus" onClick="[Link]()">
</FORM> Dans le corps
<FORM name="form3">
Pour donner le focus à un champ de formulaire à <INPUT type="button" name="bouton"
l'ouverture de la page, il faut ajouter cette ligne value="Cliquez-moi aussi !"
dans la balise BODY : onClick="CompteClic([Link])">
onLoad="[Link]['nomduform'].elements[' </FORM>
nomchamp'].focus()"
39
4 - Valider un formulaire par JavaScript
Il est souvent utile de vérifier la saisie d'un L'appui sur [Entrée] déclenche la soumission du
formulaire avant de le valider. formulaire qu'il est possible de détecter avec
L'idéal est de créer un bouton (de type "button" et l'événement onSubmit.
pas "submit") qui appelle une fonction javascript La balise FORM peut donc s'écrire :
qui contrôle la saisie et soumet ou non le <FORM name="formulaire"
formulaire. onSubmit="maFonction()">
Voyons un exemple simple de test de saisie d'un
email.
Saisissez une adresse mail valide (du type 7 - Empêcher la saisie dans un champ
nom@[Link]) Dès que la curseur souris arrive sur ce champ, il
est enlevé. Cela rend impossible la saisie ou la
Le script modification de son contenu.
Dans l'entête de la page
<SCRIPT language="javascript"> L'astuce est d'utiliser l'événement onFocus qui
function ValiderMail(formulaire) { détecte l'arrivée du curseur dans le champ.
if ([Link]("@",0)<0) Voici la ligne décrivant la zone :
{alert("Adresse mail saisie invalide.\nLe formulaire <INPUT type="text" value="Non modifiable"
ne sera pas validé.")} name="champ" onFocus="[Link]()">
else { La méthode focus() appliquée au champ retire le
alert("Formulaire validé.\nPour valider un curseur.
formulaire : [Link]()");
// Pour valider le formulaire en javascript : Avec cette ligne, il est possible de rediriger le
// [Link]() curseur vers un autre champ du formulaire :
} <INPUT type="text" value="Non modifiable"
} name="champ"
</SCRIPT> onFocus="[Link]()">
Dans le corps de la page La méthode focus() appliquée à champ2 active le
<FORM name="form4" action=""> curseur.
Saisissez une adresse mail valide (du type
nom@[Link])
;<INPUT type="texte" name="mail">
<INPUT type="button" name="bouton" 8
value="Valider" onClick="ValiderMail([Link])"> - Alimenter un champ texte au passage de la
</FORM> souris
Pour alimenter un champ texte au passage de la
5 - Vider un champ à la prise de focus souris sur un objet (ici une cellule d'un tableau),
Par exemple, un champ de saisie de login avec à jbvillier, propose cette solution :
l'origine "Votre login". <script language=javascript>
Si vous cliquez sur le champ, "Votre login" /* ti script by jbvillier@[Link] */
disparaît. function focusOn() {
[Link]["form11"].[Link] =
Le script "Hé hop" ;
<FORM name="form5"> }
<INPUT type="texte" name="login" value='Votre </script>
login' onFocus="if ([Link]=='Votre login')
{[Link]=''}"> <form name="form11"> <table width="66%"
</FORM> height="28%" border="1">
<tr>
6 - Détecter la touche [Entrée] sur un <td width="57%" height="26"
formulaire onMouseOver="focusOn()">passez la souris
Utile dans les formulaires de recherche, où la ici</td>
plupart des utilisateurs tapent [Entrée] pour valider <td width="43%"><input type="text"
la recherche, sans cliquer sur le bouton name="champtexte"></td>
"Rechercher". </tr>
</table>
Entrez un mot : </form>
40
var d2=new Date(a,m-1,j);
Ce qui donne j2=[Link]();
m2=[Link]()+1;
passez la souris ici a2=[Link]();
if (a2<=100) {a2=1900+a2}
if ( (j!=j2)||(m!=m2)||(a!=a2) ) {
Voir des exemples de contrôles de saisies dans alert("La date "+d+" n'existe pas !");
un formulaire ok=0;
}
CONTROLES DE SAISIE DANS UN }
FORMULAIRE return ok;
}
Cette page montre comment contrôler la bonne
saisie dans un formulaire. Il est utile de lire l'article 3 - Est-ce un mail ?
sur les chaînes de caractères pour comprendre Pour vérifier qu'un mail est valide, il suffit de tester
les fonctions utilisées. la présence de @ et du point.
function verifiermail(mail) {
1 - Est-ce un nombre ? if
Il peut être utile de vérifier que la saisie dans un (([Link]("@")>=0)&&([Link](".")>=0))
champ de formulaire est bien un nombre : saisie {
de quantités, de prix... return true
Saisir ici : : } else {
Soit nb le champ à tester. Si !(isNaN(nb)) retourne alert("Mail invalide !");
true, alors nb est un nombre. return false
}
2 - Est-ce une date ? }
Cette fonction vérifie la saisie d'une date au Cette fonction vérifie la présence du caractère @
format jour/mois/année. et du . pour vérifier la validité. Si ces 2 caractères
Entrez une date au format JJ/MM/AAAA sont trouvés, la fonction retourne true sinon, elle
Voici la fonction CheckDate(d), où d est une affiche un message et retourne false.
chaîne de caractères. Entrez une adresse mail
function CheckDate(d) {
// Cette fonction vérifie le format JJ/MM/AAAA Informations
saisi et la validité de la date.
// Le séparateur est défini dans la variable Nous allons étudier les propriétés Javascript de la
separateur balise HTML :
var amin=1999; // année mini <input type="reset">, qui permet de réinitialiser
var amax=2005; // année maxi le formulaire HTML.
var separateur="/"; // separateur entre <input type="submit">, qui permet d'envoyer le
jour/mois/annee formulaire HTML.
var j=([Link](0,2)); <input type="image">, qui permet d'envoyer le
var m=([Link](3,5)); formulaire HTML mais à la place du bouton on
var a=([Link](6)); spécifie une image.
var ok=1; <input type="button"> qui permet d'afficher un
if ( ((isNaN(j))||(j<1)||(j>31)) && (ok==1) ) { bouton de formulaire n'a aucune action.
alert("Le jour n'est pas correct."); ok=0;
} reset()
if ( ((isNaN(m))||(m<1)||(m>12)) && (ok==1) ) {
alert("Le mois n'est pas correct."); ok=0;
Pour remettre à jour un formulaire via le
}
javascript, il ne faut plus utiliser la balise HTML
if ( ((isNaN(a))||(a<amin)||(a>amax)) &&
<input type="reset"> mais la balise HTML
(ok==1) ) {
<input type="button">.
alert("L'année n'est pas correcte."); ok=0;
A cette dernière nous lui associerons un
}
événement, généralement un "onclick" avec la
if ( (([Link](2,3)!=separateur)||
méthode reset().
([Link](5,6)!=separateur)) && (ok==1) ) {
<input type="button"
alert("Les séparateurs doivent être des
onClick="[Link]()">
"+separateur); ok=0;
}
if (ok==1) {
41
Méthode : [Link]()
Par exemple :
Taper du texte dans le champ. Réinitialise un formulaire
L'image avec le lien peut être dans ou en dehors <INPUT type="checkbox" name="fruit"
du formulaire. value="Banane"> Banane <BR>
Vous pouvez aussi mettre une image pour la
méthode reset(), voiçi une autre manière d'écrire : <INPUT type="checkbox" name="fruit"
<a href = "javascript:[Link]()"> value="Pomme"> Pomme <BR>
<img src="[Link]"> </a>
</FORM>
42
<SCRIPT language=javascript> var argc=[Link];
var expires=(argc > 2) ? argv[2] : null;
[Link]("fruit")[0].checked var path=(argc > 3) ? argv[3] : null;
= true; var domain=(argc > 4) ? argv[4] : null;
var secure=(argc > 5) ? argv[5] : false;
[Link]("fruit")[1].checked [Link]=name+"="+escape(value)+
= true; ((expires==null) ? "" : (";
expires="+[Link]()))+
[Link]("fruit")[2].checked ((path==null) ? "" : ("; path="+path))+
= true; ((domain==null) ? "" : ("; domain="+domain))+
((secure==true) ? "; secure" : "");
</script> }
La valeur à stocker est associée à un nom de
cookie.
17. JAVASCRIPT ET LES COOKIES La date d'expiration permet de définir la longévité
du cookie. Si elle est omise, le cookie est détruit à
Avec JavaScript, il est possible de programmer la fermeture du navigateur.
les célèbres cookies. Le path indique simplement d'où vient le cookie.
Nous allons voir ici à quoi servent les cookies et Le nom de domaine permet d'identifier le cookie
comment stocker et récupérer des informations parmi tous ceux stockés sur la machine.
grâce à eux. La variable secure indique si l'accès au cookie est
En bas de cette page, vous trouverez des protégé.
exemples de programmation de cookies. Donc pour stocker la valeur Arthur dans la
variable prenom il suffit d'appeler la fonction
1 - A quoi servent les cookies ? comme ceci :
Les cookies sont très utilisés, par tous les sites var pathname=[Link];
commerciaux et par de plus en plus de sites var
perso. La raison est simple. Un cookie permet de myDomain=[Link](0,[Link]
stocker de manière permanente des informations ndexOf('/')) +'/';
sur le poste du visiteur, qui pourront être var date_exp = new Date();
récupérées lors des futures visites. date_exp.setTime(date_exp.getTime()
Voyons quelques unes des principales +(365*24*3600*1000));
informations stockées dans les cookies : // Ici on définit une durée de vie de 365 jours
• Le nombre de visites, la date de la SetCookie("prenom","Arthur",date_exp,myDomain
dernière visite,... (Exemple : Tout );
[Link])
• Un identifiant et un mot de passe pour une
reconnaissance automatique du visiteur 3 - Comment RECUPERER les informations ?
(Exemple : CDNow) Voyons un cookie qui contiendrait les informations
• Une liste de mots-clés utilisés dans les suivantes :
moteurs de recherche pour cibler les • prenom = Arthur
publicités à afficher (Exemple : beaucoup • nb_visite = 3
de moteurs de recherche) Pour récupérer l'information prenom, il faut
• Une liste de paramètres de préférences de extraire, de la chaîne de caractères composant le
navigation pour personnaliser la page cookie, le nom de la variable soit prenom. La
présentée (Exemple : Mon Yahoo !) valeur de prenom est la chaine de caractères
• Des informations à transférer d'une page à située immédiatement après et séparée par ';' et
l'autre du site. par ' '.
Voici le code des fonctions nécessaires à la
2 - Comment STOCKER des informations ? récupération d'une information :
function getCookieVal(offset) {
Le type d'informations à stocker n'a aucune var endstr=[Link] (";", offset);
influence sur le code. Un cookie est un fichier de if (endstr==-1)
texte qui contient une chaîne de caractères
contenant les informations concaténées. endstr=[Link];
Voici la fonction qui permet de stocker une return
information dans un cookie unescape([Link](offset,
function SetCookie (name, value) { endstr));
var argv=[Link]; }
function GetCookie (name) {
43
var arg=name+"="; documentation est riche dans ce domaine.
var alen=[Link];
var clen=[Link]; 2 - Le JavaScript dans les frames
var i=0;
while (i<clen) { La première application qui vient à l'esprit avec
var j=i+alen; les frames est la création de menu. C'est en effet
if ([Link](i, j)==arg) la principale utilité des frames - nous verrons qu'il
return getCookieVal (j); y en a d'autres.
i=[Link](" ",i)+1; En HTML, pour créer un lien qui charge une page
if (i==0) break;} dans une frame, il faut écrire :
return null; <A HREF="[Link]"
} target="nom_frame">Le Lien</A>
Si la variable demandée n'est pas contenue dans Dans la balise A, target contient le nom de la
le cookie, elle est considérée comme valant null. frame à charger avec le fichier (ici [Link]).
Pour récupérer la variable prenom, il suffit En JavaScript, pour charger une page dans une
d'appeler la fonction : frame, on utilise une des instructions suivantes :
le_prenom=GetCookie("prenom");
[Link][nu_frame].[Link]="page.h
tml"
18. JAVASCRIPT ET LES FRAMES Ici, on fait appel au tableau frames indicé par
nu_frame. Ici la frame numéro nu_frame contient
Les frames sont de plus en plus rejetées par le [Link].
monde de l'internet. La plupart des grands sites
les ont abandonnées et ont choisi de recopier sur [Link]["frame1"].[Link]="[Link]
chaque page le menu et tous les liens de leur ml"
navigation. Nous allons tout de même aborder la Maintenant, on accède au tableau des frames par
mise en place des frames et surtout leur intérêt son nom. Le résultat est identique avec
dans la programmation JavaScript. l'instruction suivante :
45
très utiles pour manipuler des variables en étant
ATTENTION, isNaN(valeur) retourne vrai si sur d'avoir affaire à des nombres. Cela permet par
valeur N'est PAS un nombre exemple de convertir une saisie dans un
Pour bien comprendre formulaire et de vérifier que le visiteur a bien entré
Vous pouvez tester ces fonctions grâce à ce un nombre (prix, quantité, âge, année, ...)
formulaire (essayez avec un nombre et avec une
chaîne comme "azerty") : 2. L'objet Math
chaine contient
entier contient isNaN(entier)= Le tableau suivant décrit les méthodes de l'objet
reel contient isNaN(reel) = Math.
• x = [Link](5,5) donne x = 5
• x = [Link](6,7.25) donne x =
7.25
min(Nombre1, Retourne le plus petit des deux entiers donnés en • x = [Link](-8.21,-3.65)
Nombre2) paramètre donne x = -3.65
• x = [Link](5,5) donne x = 5
• x = [Link](6,7.25) donne x =
6
min(Nombre1, Retourne le plus petit des deux entiers donnés en • x = [Link](-8.21,-3.65) donne
Nombre2) paramètre x = -8.21
• x = [Link](5,5) donne x = 5
• x = [Link](3,3) donne x = 27
pow(Valeur1, Retourne le nombre Valeur1 à la puissance
Valeur2) Valeur2 • x = [Link](9,0.5) (racine
carrée) donne x = 3
Retourne un nombre aléatoire compris entre 0 et • x = [Link]() donne x =
random()
1 0.6489534931546957
Retourne la racine carrée du nombre passé en • x = [Link]() donne x =
sqrt(Valeur)
paramètre 0.6489534931546957
46
Logarithmes et exponentielle
Méthode description
Math.E Propriété qui retourne le nombre d'Euler (environ 2.718)
[Link](valeur)Retourne l'exponentielle de la valeur entrée en paramètre
Math.LN2 Retourne le logarithme népérien de 2
Math.LN10 Retourne le logarithme népérien de 10
[Link](valeur) Retourne le logarithme de la valeur entrée en paramètre
Math.LOG2E Propriété qui retourne la valeur du logarithme du nombre d'Euler en base 2
Math.SQRT1_2 Propriété qui retourne la valeur de 1 sur racine de 2 (0.707)
Math.SQRT2 Racine de 2 (1.414)
Trigonométrie
Méthode description
[Link] Retourne la valeur du nombre PI, soit environ 3.1415927
[Link](valeur) Retourne le sinus de la valeur entrée en paramètre (doit être donnée en radians)
[Link](valeur) Retourne l'arcsinus de la valeur entrée en paramètre (doit être donnée en radians)
[Link](valeur) Retourne le cosinus de la valeur entrée en paramètre (doit être donnée en radians)
[Link](valeur)Retourne l'arccosinus de la valeur entrée en paramètre (doit être donnée en radians)
[Link](valeur) Retourne la tangente de la valeur entrée en paramètre (doit être donnée en radians)
[Link](valeur) Retourne l'arctangente de la valeur entrée en paramètre (doit être donnée en radians)
La syntaxe pour créer un objet-date peut être une La date est stockée dans une variable sous la
des suivantes: forme d'une chaîne qui contient le jour, le mois,
l'année, l'heure, les minutes, et les secondes. Il
1. Nom_de_l_objet = new Date() est donc difficile d'accéder à un seul élément d'un
cette syntaxe permet de stocker la date et objet date, étant donné que chacun des éléments
l'heure actuelle peut avoir une taille variable. Heureusement, les
2. Nom_de_l_objet = new Date("mois jour, méthodes de l'objet Date fournissent un moyen
année heures:minutes:secondes") simple d'accéder à un seul élément, ou bien de le
les paramètres sont une chaîne de modifier.
caractère sous cette notation Leur syntaxe est la suivante:
3. Nom_de_l_objet = new Date(year, Objet_Date.Methode()
month, day)
les paramètres sont trois entiers séparés Connaître la date
par des virgules.
Les paramètres omis sont mis à zéro par Les méthodes dont le nom commence par le
défaut radical get (mot anglais qui signifie récupérer)
4. Nom_de_l_objet = new Date(year, permettent de récupérer une valeur:
month, day, hours, minutes, seconds)
les paramètres sont six entiers séparés
par des virgules.
Les paramètres omis sont mis à zéro par
défaut
47
Méthode Description Type de valeurs retournée
Permet de récupérer la valeur du L'objet retourné est un entier (entre 1 et 31) qui
getDate()
jour du mois correspond au jour du mois:
L'objet retourné est un entier qui correspond au jour
de la semaine:
Permet de récupérer la valeur du
getDay() jour de la semaine pour la date
• 0: dimanche
spécifiée
• 1: lundi ...
Permet de récupérer la valeur de L'objet retourné est un entier (entre 0 et 23) qui
getHour()
l'heure correspond à l'heure
Permet de récupérer la valeur des L'objet retourné est un entier (entre 0 et 59) qui
getMinutes()
minutes correspond aux minutes
L'objet retourné est un entier (entre 0 et 11) qui
correspond au mois:
Permet de récupérer le numéro du
getMonth()
mois • 0: janvier
• 1: février ...
L'objet retourné est un entier. Cette méthode est
Permet de récupérer le nombre de
getTime() très utile pour passer d'une date à une autre,
secondes depuis le 1er janvier 1970
soustraire ou ajouter deux dates, ...
Retourne la différence entre l'heure
L'objet retourné est un entier, il représente le
getTimezoneOffset()locale et l'heure GMT (Greenwich
nombre de minutes de décalage
Mean Time)
Les deux méthodes suivantes ne permettent de travailler que sur l'heure actuelle (objet Date()) leur syntaxe
est donc figée:
Modifier la date
Les méthodes dont le nom commence par le radical set (mot anglais qui signifie règler) permettent de
modifier une valeur:
• 1: lundi ...
Permet de fixer la valeur de Le paramètre est un entier (entre 0 et 23) qui correspond à
setHour(X)
l'heure l'heure
Permet de fixer la valeur des Le paramètre est un entier (entre 0 et 59) qui correspond aux
setMinutes(X)
minutes minutes
48
Le paramètre est un entier (entre 0 et 11) qui correspond au
mois:
Permet de fixer le numéro du
setMonth(X)
mois • 0: janvier
•
1: février ...
Le paramètre est un entier représentant le nombre de
setTime(X) Permet d'assigner la date
secondes depuis le 1er janvier 1970
Attention!
Les méthodes getTime() et setTime() ne sont pas en secondes mais en millisecondes.
Si vous voulez attribuer un timestamp récupérer par exemple avec PHP, vous devez le multiplier par 1000.
Saisissez un login :
Saisissez un login :
Voici le code correspondant :
function VerifLogin(login) {
var exp=new RegExp("^[a-zA-Z0-9]{3,8}$","g");
if ( [Link](login) ) {alert("Le login ["+login+"] est
valide :)"); }
else {alert(" E R R E U R !\n\nLe login ["+login+"]
n'est pas valide !!!!"); }
Il existe 2 manières pour déclarer un objet RegExp. La plus lisible est d'utiliser le constructeur RegExp :
var reg=new RegExp(pattern, option);
Ici, reg est devenu un objet de type RegExp.
pattern est le motif associé, ce qui permet de faire le traitement. Son format est défini dans le paragraphe
suivant.
option est une chaîne de caractère qui peut prendre les valeurs :
"", vide, aucune option,
"g", recherche globale sur toute la chaîne,
"i", ne pas faire la distinction majuscule/minuscule,
"gi", association de g et i.
Une autre notation, plus compacte, mais moins lisible est utilisée :
var exp=/pattern/option; Les 2 notations sont exactement équivalentes.
50
\\ Caractère \
\d Chiffres (équivalent à [0-9])
\D Sauf chiffres (équivalent à [^0-9])
\b Frontière de mot (espace, alinéa, ...)
\s Caractère d'espacement (espace, tabulation, saut de page, ...) équivalent à [ \f\n\r\t\v]
\S Un seul caractère sauf un espacement
\w N'importe quel caractère alphanumérique, y compris undescore (_) équivalent à [A-Za-z0-9_]
\W Tout sauf un caractère alphanumérique équivalent à [^A-Za-z0-9_]
Exemples de motif
Si on reprend l'exemple du contrôle de login, le pattern valait : ^[a-zA-Z0-9]{3,8}$
La signification est :
^ : pour montrer le début de la chaine,
[a-zA-Z0-9] : pour les caractères alphanumérique de a à z, de A à Z et de 0 à 9,
{3,8} : pour indiquer qu'il faut une longueure de 3 à 8 caractères alphanumériques,
$ : pour interdire tout caractère après.
Pour tester qu'une saisie est un mail valide, voici la chaîne pattern à utiliser :
^[a-zA-Z0-9\-_]+[a-zA-Z0-9\.\-_]*@[a-zA-Z0-9\-_]+\.[a-zA-Z\.\-_]{1,}[a-zA-Z\-_]+
La signification de cette chaîne est logique également :
^ : début du mail
[a-zA-Z0-9\-_]+ : Au moins un caractère alphanumérique en début de mail
[a-zA-Z0-9\.\-_]* : Tous les caractères alphanumériques plus ., - et _ au moins 1 fois
@ : une fois arobase
[a-zA-Z0-9\-_]+ : Tous les caractères alphanumériques plus ., - et _ au moins 1 fois
\. : 1 fois le caractère .
[a-zA-Z0-9\.\-_]{1,} : Tous les caractères alphanumériques plus ., - et _ au moins 2 fois
[a-zA-Z0-9\-_]+ : Au moins un caractère alphanumérique en fin de mail
L'objet RegExp possède plusieurs méthodes qui Supposons une liste de noms séparés par des
ont différents effets. virgules, des espaces ou des points-virgules, mais
Nous avons déjà vu la méthode test() qui valide dont le format n'est pas uniforme.
une chaîne de caractères en fonction d'un motif. Les expressions régulières vont nous permettre
La méthode exec() retourne un tableau des de créer un tableau avec tous les noms
occurences répondant aux critères du motif. correctement isolés.
Sur l'objet string, il existe également des
méthodes qui attendent en paramètres une Listes des noms :
expression régulière.
La méthode search() permet de trouver des
occurences répondant aux critères du motif. Pour l'extraction par split(), cette fonction est
La méthode replace() permet de trouver et de utilisée :
remplacer des occurences répondant aux critères function ExtraireNom(chaine) {
du motif. var exp=new RegExp("[, ;]+","g");
La méthode match() permet de trouver des var tabNom=[Link](exp);
occurences répondant aux critères du motif. if (tabNom==null) {alert("Problème dans
l'expression !");}
51
else { passés dans une url pour les traiter en javascript.
var affichage="Nombre de noms trouvés = " + Cette fonction crée un tableau associatif avec tous
[Link] + "\n"; les paramètres de l'url et leur valeur. Il est donc
for (var i=0;i<[Link];i++){ possible de passer des paramètres de page en
affichage=affichage + " ["+ tabNom[i] + "]\n"; page en javascript.
}
alert(affichage);
} Le bouton ouvre un popup pour afficher le résultat
} Voici la fonction qui crée le tableau de paramètres
La méthode split() créé un tableau qui contient :
tous les éléments trouvés entre le séparateur function TJS_ExtractURL(url) {
défini par l'expression régulière. var regexp=new RegExp("[?&]");
var tab=[Link](regexp);
Pour l'extraction par match(), cette fonction est tabparam=new Array;
utilisée : for (var i=1;i<[Link];i++){
function ExtraireNom2(chaine) { tabparam[tab[i].substring(0,tab[i].indexOf("="))]=
var exp=new RegExp("[a-zA-Z\-]+","g"); tab[i].substring(tab[i].indexOf("=")+1)
var tabNom=[Link](exp); }
if (tabNom==null) {alert("Problème dans }
l'expression !");}
else {
var affichage="Nombre de noms trouvés = " +
[Link] + "\n"; Remplacer des caractères
for (var i=0;i<[Link];i++){
affichage=affichage + " ["+ tabNom[i] + "]\n"; Les expressions régulières permettent également
} de remplacer des caractères dans une chaîne.
alert(affichage); Chaine AVEC les accents :
}
} Chaine SANS les accents :
La méthode match() créé un tableau qui contient Ici, on remplace tous les "e" accentés par un "e".
tous les éléments qui correspondent à chaine=[Link](/[éèêë]/g,"e");
l'expression régulière.
Rendre un mail cliquable
Extraction d'adresse mails dans un texte
Texte à traiter :
La fonction remplace permet également de retenir
Encore une utilisation de la méthode match() : des valeurs trouvées dans l'expression et de les
function ExtraireMail(chaine) { réutiliser dans la chaîne de remplacement.
var exp=new RegExp("[a-zA-Z0-9\-_]+[a-zA-Z0- Par exemple pour la chaîne de texte suivante :
9\.\-_]*@[a-zA-Z0-9\-_]+\.[a-zA-Z\.\-_]{1,}[a-zA-Z\-
_]+","g"); Bonjour, vous pouvez nous joindre sur
var tabMail=[Link](exp); monsite@[Link] ou info@[Link]
if (tabMail==null) {alert("Problème dans
l'expression !");} A bientôt.
else {
var affichage="Nombre de mails trouvés = " + Après traitement, la chaîne de texte devient :
[Link] + "\n"; Bonjour, vous pouvez nous joindre sur
for (var i=0;i<[Link];i++){ monsite@[Link] ou info@[Link]
affichage=affichage + " ["+ tabMail[i] + "]\n"; A bientôt.
}
alert(affichage);
} function TJS_EmailCliquable(email) {
} var exp=new RegExp("([a-zA-Z0-9\.\-_]+@[a-zA-
Z0-9\-_]+\.[a-zA-Z0-9]{2,})","g");
Extraire les paramètres d'une url return [Link](exp,"<A href='mailto:
$1'>$1</A>");
Grâce aux expressions régulières, on peut }
également extraire simplement les paramètres
52
De même, il n'est pas possible de lister les
Rendre une adresse url cliquable logiciels copiés et non enregistrés.
Impossible aussi de détruire des fichiers
indispensables ou d'introduire un virus sur
Je vous invite à visiter le site de mon partenaire le poste d'un visiteur.
[Link] ! Certains diront que JavaScript possède
des fonctions pour lire des fichiers texte.
En fait, javascript permet d'intégrer des
Après traitement, la chaîne de texte devient : applets Java ou ActiveX qui elles sont
Je vous invite à visiter le site de mon partenaire capables d'agir sur le disque dur. Il ne
[Link] s'agit pourtant pas de javascript pur : si
vous désactivez Java et ActiveX, rien ne se
function TJS_UrlCliquable(url) { passera.
var exp1=new RegExp("((ht|f)tps?://.*)[\\s]+","gi"); JavaScript seul ne peut pas non plus récupérer
l'adresse IP d'un visiteur. Il est indispensable
également de passer par des appels à Java ou
return [Link](exp1,"<A href='$1'>$1</A>"); à ActiveX.
}
3 - Les limites de JavaScript
53