Leçon Javascript
Leçon Javascript
1
COURS DE JAVASCRIPT
Le Dynamic HTML (DHTML) est une extension du //--> // Fin de la partie cachée
HTML qui, associée au javascript et aux feuilles
de styles, permet de manipuler dynamiquement
</SCRIPT>
des éléments HTML sur une page.
L'argument de la balise <SCRIPT> décrit le langage
Le DHTML a été inventé par Netscape à partir de sa utilisé. Il peut être "JavaScript" "JavaScript1.1"
version 4. Microsoft a suivi cette voie en "JavaScript1.2".
développant un autre langage de DHTML à
partir de la version 4 de Internet Explorer.
Dans un fichier externe
JavaScript est un langage de programmation
complètement lié au langage HTML. Le développeur Il est possible de mettre les codes de JavaScript en
internet code ses pages HTML en y intégrant des annexe dans un fichier (à partir de Netscape 3.0
sources JavaScript. Le visiteur, par l'intermédiaire de uniquement). Le code à insérer est le suivant:
son navigateur, charge le code des pages.
<SCRIPT LANGUAGE=Javascript
SRC="url/fichier.js"> </SCRIPT>
C'est le navigateur qui interprète le code HTML et
JavaScript. L'interprétation dépend naturellement du
type de navigateur utilisé et de sa version. Oû url/fichier.js correspond au chemin d'accès au
fichier contenant le code en JavaScript,
JavaScript est un langage objet et événementiel. Le
développeur peut créer des objets sur la page, avec Grâce aux évènements
des propriétés et des méthodes et leur associer des
actions en fonction d'événements déclenchés par le On appelle évènement une action de l'utilisateur,
visiteur (passage de souris, clic, saisie clavier, etc...) comme le clic d'un des boutons de la souris. Le code
dans le cas du résultat d'un événement s'écrit:
1 - COMMENT INTEGRER DU CODE JAVASCRIPT
DANS UNE PAGE HTML ? <balise eventHandler="code Javascript à insérer">
Il y a plusieurs façon d'inclure du JavaScript dans Pour écrire des commentaires, Javascript utilise les
une page HTML: conventions utilisées en lange C/C++
1
ENI RV. 2
tableau leurs types ne peuvent être modifiés mais leur Lorsque l'on déclare de façon explicite une variable
contenu peut être modifié. en javascript (en précédant sa déclaration avec le mot
prenons comme exemple un tableau declaré avec var), sa portée dépend de l'endroit où elle est déclarée.
const comprenant trois valeurs : • Une variable déclarée au début du script, c'est-
const tableau=["un","deux","trois"] à-dire avant toute fonction sera globale, on
on ajoute une valeur au tableau puis on affiche la pourra alors les utiliser à partir de n'importe
valeur de la variable : quel endroit dans le script
const tableau=["un","deux","trois"] Une variable déclarée par le mot clé var dans une
tableau.push("quatre") fonction aura une portée limitée à cette seule fonction,
console.log(tableau) //renvoi c'est-à-dire qu'elle est inutilisable ailleurs, on parle
"un","deux","trois","quatre" alors de variable locale
2
ENI RV. 3
propriété à une variable de type string fonctionne bien Le tableau suivant décrit les méthodes de l'objet string.
évidemment aussi.
• var Resultat =
Retourne le caractère situé à la position chaine.charAt("Comment ça
chaîne.charAt(position)
donnée en paramètre marche?", 1)
donne 'o'
• var Resultat =
Retourne la position d'une sous-chaîne
Chaine.indexOf(Sous_Chaine, 6)
(lettre ou groupe de lettres) dans une
indexOf(sous-chaîne, donne '11'
chaîne de caractère, en effectuant la
position) • var Resultat =
recherche de gauche à droite, à partir de la
Chaine.indexOf(Sous_Chaine,
position spécifiée en paramètre.
12)
donne '-1'
• var Resultat =
Chaine.lastIndexOf(Sous_Chaine
La méthode retourne la sous-chaîne (lettre , 6)
substring(position1,
ou groupe de lettres) comprise entre les donne '-1'
position2)
positions 1 et 2 données en paramètre. • var Resultat =
Chaine.lastIndexOf(Sous_Chaine
)
donne '11'
toLowerCase() Convertit tous les caractères d'une chaîne Chaine = 'Comment ça Marche?'
en minuscule
• var Resultat =
Chaine.toLowerCase
3
ENI RV. 4
• var Resultat =
Convertit tous les caractères d'une chaîne Chaine.toUpperCase
toUpperCase()
en majuscule donne 'COMMENT çA
MARCHE?'
D'autres methodes
Méthode description
Correspond à la balise HTML <A name="
">.
anchor(nom_a_donner) Transforme le texte en ancrage HTML var dmc="alias";
document.write(dmc.anchor("Nom"));
var dmc="alias";
big() Augmente la taille de la police
document.write(dmc.big());
blink() Transforme la chaîne en texte clignotant
var dmc="alias";
bold() Met le texte en gras (balise <B>) document.write(dmc.bold());
var dmc="alias";
fixed Transforme le texte en police fixe (balise <TT>) document.write(dmc.fixed());
var dmc="alias";
italics() Transforme le texte en italique (balise <I>) document.write(dmc.italics());
var dmc="alias";
Transforme le texte en hypertexte (balise <A
link(URL) document.write(dmc.link("../index.html"));
href>)
Voici sa syntaxe:
alert(nom_de_la_variable);
alert('Chaîne de caractères'); Sa syntaxe est donc la suivante:
alert('Chaîne de caractères' + nom_de_la_variable); Sa syntaxe est:
5
ENI RV. 6
var reponse = prompt('Posez ici votre question','chaîne </head><body>
par défaut'); </body></html>
Exemple
Il semble que l'on ne puisse pas faire passer plusieurs
arguments.
Le seul moyen est de créer un Objet.
<html>
<html><head><title>Test utilisateur</title> <head>
<script language="JavaScript"> <title>Prompt</title>
<!-- <meta http-equiv="Content-Type" content="text/html;
var motpasse = "danseuretoile"; charset=iso-8859-1">
entree = window.prompt("Veuillez donner le mot de </head>
passe:",""); <body bgcolor="#FFFFFF" text="#000000">
if(entree != motpasse) <script language="JavaScript">
{ alert("Mot de passe erroné!"); var mo = new Object();
history.back(); mo.nom ="dmc";
} mo.prenom="alias";
else //var m = showModalDialog("showmodaldialog.html",
document.location.href="secret.htm"; mo, "status=no; scroll=no; help=no; unadorned=yes");
// --> var m = showModalDialog("showmodaldialog.html","",
</script> "status=no; scroll=no; help=no; unadorned=yes");
6
ENI RV. 7
if(m==true){ itérative, dans d'autres fonctions et dans le corps de la
alert("le nom et prénom sont bons."); page.
}else{
alert("le nom et prénom ne sont pas bons."); Le code suivant, par exemple, définit une fonction
} nommée intitulée carré :
</script>
</body> function carre(nombre) { return nombre * nombre;}
</html>
Dans la page showmodaldialog.html pour recupérer Appel: var c= carre(4);document.write(" Carre: " +c);
l'objet mo:
<html> console.log(“Carre: “,carre(5));
<head>
<title>Prompt</title> Les paramètres primitifs (comme les nombres) sont
</head> passés à la fonction par valeur.
<body bgcolor="#FFFFFF" text="#000000">
<script language="JavaScript"> Une fonction peut être récursive, c'est-à-dire qu'elle
if(window.dialogArguments.prenom == "alias" && peut s'appeler elle-même.
window.dialogArguments.nom == "dmc"){
window.returnValue = true;
Voici la fonction qui calcule récursivement la factorielle
window.close();
d'un nombre :
}else{
window.returnValue = false;
window.close(); } function factorielle(n){ if ((n === 0) || (n === 1))
</script> return 1;
</body>
</html> else return (n * factorielle(n - 1));}
var c;
6 - LA DECLARATION DES FONCTIONS ET DES
INSTRUCTIONS
c = factorielle(3); // c reçoit la valeur 6
Les fonctions et instructions sont déclarées et codées
dans l'entête de la page et peuvent être appelées Si l'argument passé à la fonction est un objet (comme
ensuite à n'importe quel endroit de la page. Pour un objet Array ou un objet défini par l'utilisateur), et que
déclarer une fonction ou une instruction, on utilise le la fonction change les propriétés de cet objet, ces
mot-clé "function", suivi de son nom et des éventuels changements seront visibles en dehors de la fonction.
paramètres. Par exemple :
Une fonction aura dans son corps une ou plusieurs y = mavoiture.fabricant; // y aura la valeur "Toyota"
instructions return qui permet de renvoyer une valeur // (la propriété fabricant
ou un objet. L'instruction return n'est pas obligatoire; on
a alors affaire à une instruction qui ne renvoie pas de Les expressions de fonction (l'expression function)
valeur.
On peut créer une fonction grâce à une expression de
Les fonctions déclarées dans l'entête de la page fonction. De telles fonctions peuvent être anonymes
peuvent être appelées elles-mêmes, de manière (ne pas avoir de nom correspondant). Par exemple,
7
ENI RV. 8
var carre = function (nombre) { return nombre * }
nombre };
Appeler des fonctions
// carre : une variable qui fait référence à la fonction
nom_fonction( arg1,arg2,…)
var x = carre(4); //x reçoit la valeur 16 : appel
Les fonctions doivent appartenir à la portée dans
Cependant, un nom peut être utilisé dans une laquelle elles sont appelées.
expression de fonction, ce afin de l'utiliser dans la
fonction (récursivité) En revanche, la déclaration d'une fonction peut être
faite après l'appel :
var factorielle =function fac(n) {return n < 2 ? 1 :
n*fac(n - 1) }; console.log(carré(5));
console.log(factorielle(3)); /* ... */
Il est possible de passer une expression de fonction function carre(n) { return n*n }
comme argument d'une autre fonction. Dans l'exemple
qui suit, la fonction map est définie et appelée avec Note : Cela ne fonctionne que pour les fonctions
une fonction anonyme comme premier argument : nommées
var resultat = []; // Créer un tableau Array Le code ci-dessous ne fonctionnera pas :
Comme en C, les instructions sont regroupées par les Comme en C, le javascript reconnaît les boucles
accolades { et }. Dans un script, il doit y avoir autant itératives et les boucles conditionnelles.
d'accolades ouvertes que d'accolades fermées. Les boucles itératives
Le groupement d'instructions est utile. Il permet par Une boucle itérative exécute un groupe d'instructions
exemple de regrouper les instructions d'une fonction : tant que le compteur d'itérations n'a pas atteint une
function somme(a,b) { valeur donnée.
var sum=a+b; Voici la syntaxe générale
return sum;
} for(initialisation;condition;opération) {
Cette fonction inutile retourne la somme de deux // Vos instructions
paramètres. }
11
ENI RV. 12
Nous allons créer un bouton pour
charger une autre page.
function change(){
window.location="../index.html";
}
Pour récupérer l'url complète de la page
1.
location en cours.
Dans la balise HTML ou XHTML
body :
<form>
<input type="button" value="changer"
onclick="change()">
</form>
nombre de cadres (nombre d'éléments
length Lecture seule
du tableau frames
nom de la fenêtre dans laquelle on se
name Lecture seule
trouve
Il s'agit de la fenêtre qui englobe celle
Lecture seule, contient
parent dans laquelle on se trouve (si il y en a
des propriétés
une..)
Synonyme de la fenêtre actuelle Lecture seule, contient
self
(redondance ou précision?) des propriétés
window.status="Vous êtes sur le site de
non, modifiable à tout
DMC";
Il s'agit d'un message temporaire qui moment, vous devez
status s'affiche dans la barre d'état du retournez la valeur true
Pour supprimer le texte dans la barre des
navigateur suite à un événement pour l'utiliser avec
statuts :
onMouseOver
window.status="";
Il s'agit de la fenêtre de plus haut niveau,
Lecture seule, contient
Top celle qui contient tous les cadres
des propriétés
(frames)
Lecture seule, contient
Window Il s'agit de la fenêtre actuelle...
des propriétés
bgColor :
récupérer et de modifier la couleur de document.bgColor = "#993333";
fond de votre page HTML.
12
ENI RV. 13
cadre, soit window.nom_du_cadre en pixels)
désignant le cadre directement par le nom
Position verticale en pixels sur
qu'on lui a assigné dans la balise frameset. Top (en pixels)
l'écran
Les méthodes de l'objet window Popup en plein écran (version 5
Fullscreen (yes/no)
L'objet window possède des méthodes relatives à et +)
l'ouverture et à la fermeture des fenêtres.
Une méthode est une fonction associée à un objet, Par exemple,
c'est-à-dire une action que l'on peut faire exécuter à un open("page.html");
objet.. Une méthode s'appelle un peu comme une open("page.html", "target");
propriété, c'est-à-dire de la manière suivante: open("", "");
open("page.html", "target", "toolbar=yes,
window.objet1.objet2.methode() directories=yes, status=yes, menubar=yes, width=100,
height=100, scrollbars=yes, location=yes,
- Les méthodes alert(), confirm() et prompt() resizable=yes") ;
var Nom_fenetre = window.open("_page.html", "cible",
"width=100, height=100");
Les méthodes alert(), confirm() et prompt() sont des var Nom_fenetre = window.open("page.html", "cible",
méthodes qui font apparaître une boîte de dialogue. "top=100, left=100");
var Nom_fenetre =
window.open("_page.html" ,"cible" ,"width=200,
- Les méthodes open(), et close() height=200, resizable=yes, scrollbars=yes,
menubar=yes, status=no, location=yes, toolbar=yes");
Les méthodes open() et close() sont bien évidemment
destinées à permettre l'ouverture et la fermeture de Si vous voulez ouvrir une fenêtre virtuelle ne mettez
fenêtres. Toutefois la syntaxe de la méthode open() est rien à l'emplacement de la page :
longue car elle admet un nombre important de var Nom_fenetre = window.open("", "cible", "width=100,
paramètres: height=100, _les_autres_attributs");
La méthode open() permet d'ouvrir une nouvelle
fenêtre popup, voici sa syntaxe: Quelques exemples de combinaisons d'options :
window.open("URL",["nom_de_la_fenetre"],
["options_de_la_fenetre"]); Popup positionné avec Position fixe en haut à gauche :
OuvrirPopup('popup.html','','top=10,left=10')
La méthode javascript open() est composée de trois
parties : Popup minimaliste avec Aucune barre de menu, non
- la page à ouvrir (url), l'url de la page qui sera affichée redimensionnable, taille fixe :
dans la nouvelle fenêtre OuvrirPopup('popup.html', '', 'resizable=no,
- la cible (target. _self , _blank.....) location=no, width=200, height=100, menubar=no,
- ces caractéristiques (attributs). status=no, scrollbars=no, menubar=no')
Il est préférable de l'associer à une variable, ce qui Popup fullscreen avec Page en plein écran (version 5
nous permettra de manipuler la pop up: et +). Faire un ALT [F4] pour fermer la fenêtre :
var m = open("page.html","target","options"); OuvrirPopup('popup.html','','fullscreen=yes')
Les options de la fenêtre sont les suivantes:
Voici la fonction javascript qui ouvre un popup pour
tous ces exemples :
Option description
Affiche ou non les boutons de
directory = yes/no
navigation <SCRIPT language=javascript>
Location = yes/no Affiche ou non la barre d'adresse function OuvrirPopup(page,nom,option) {
Affiche ou non la barre de menu window.open(page,nom,option);
menubar = yes/no }
(fichier, edition, ...)
</SCRIPT>
Définit si la taille de la fenêtre est
resizable = yes/no
modifiable ou non
Affiche ou non les ascenceurs
scrollbars = yes/no • les options doivent être saisies les unes
(barres de défilement)
après les autres, séparées par des
status = yes/no Affiche ou non la barre d'état
virgules, sans espace
toolbar = yes/no Affiche ou non la barre d'outils
width = largeur (en • l'ensemble des options doit être encadré
Définit la largeur
pixels) par les guillemets
height = hauteur (en Définit la hauteur
13
ENI RV. 14
Chacune des fenêtres doit cependant être fermée, il Pour un bouton (image), le code sera:
faut donc se servir de la méthode close() qui permet de <A href="#"
fermer une fenêtre. onClick="self.close('nom_de_la_fenetre_');return(false)
"><img src="nom_de_l_image"></A>
La méthode close() requiert le nom de la fenêtre
comme argument, il suffit donc de créer un bouton Il est bien évidemment possible d'utiliser cette
(image, hypertexte, ou bouton de formulaire) qui procédure avec tous les gestionnaires d'événement, en
permettra de fermer cette fenêtre. utilisant par exemple une syntaxe proche de celle-ci:
<A href="#"
Pour un lien hypertexte, le code sera: onMouseOver="self.close('nom_de_la_fenetre_');"
<A href="#" ><img src="nom_de_l_image"></A>
onClick="self.close('nom_de_la_fenetre_');return(false)
">Cliquez ici pour fermer la fenêtre</A>
function fermer_window()
{ window.close(); }
</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>
: window.blur() <A href="javascript:window.blur()">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.
14
ENI RV. 15
A partir d'elle même : window.focus();
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 délai <script language="JavaScript">
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 l'heure timerId=setTimeout("Alarme3s()",3000);
dans la barre de status. tim2Id=setTimeout("Arret()",3000);
marche=true;
<SCRIPT language=javascript> }
function Timer() { else {
var dt=new Date() clearTimeout(timerId);
window.status=dt.getHours() clearTimeout(timer2Id);
+":"+dt.getMinutes()+":"+dt.getSeconds(); marche=false;
setTimeout("Timer()",1000); }
} }
Timer(); function Arret(){marche=false;}
</SCRIPT> function Alarme3s(){alert("3 secondes se sont écoulées.")}
</script>
</head>
Exemple 2
<SCRIPT language=javascript>
function TailleFenetre(deltaX, deltaY) {
window.resizeBy(deltaX, deltaY);
}
</SCRIPT>
<A href="javascript:TailleFenetre(-10,0)">Réduire la largeur de la
fenêtre</A>
16
ENI RV. 17
12. L'OBJET NAVIGATOR
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.
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:
document.write(navigator.userAgent);
// Version = navigator.appVer;
Nom = navigator.appName;
17
ENI RV. 18
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 = navigator.appName;
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.
Nom = navigator.appName;
Version = navigator.appVer;
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
}
De plus, Navigator possède une méthode intéressante : la méthode javaEnabled(), qui détermine si Java a été activé
sur le navigateur ou pas.
<html><head><title>Test</title>
</head><body>
<script type="text/javascript">
document.writeln("Nom du navigateur"+navigator.appName);
document.writeln("Version:"+navigator. appVersion);
document.writeln("Langue:"+navigator. platform);
document.writeln("En-tête du protocole HTTP:"+navigator. userAgent);
document.writeln("Langue"+navigator. language );
if(navigator.appCodeName == "Mozilla") alert("un navigateur puissant");
if(navigator.javaEnabled())
{
document.write("<applet code=\"ticker.class\" width=\"150\" height=\"25\">");
document.write("<\/applet>");
18
ENI RV. 19
}
</script>
</body></html>
Pour tenter de récupérer la localisation des visiteurs, on utilise la méthode getCurrentPosition() de l’objet geolocation
pour obtenir la latitude et la longitude de l’utilisateur si on y a accès.
Tout d’abord, on crée une fonction auto-invoquée (fonction nommée) qui va vérifier si les informations de localisation
sont disponibles ou pas.
En effet, si celles-ci sont disponibles, loc ne sera pas vide, et donc le test if loc == true sera vérifié.
Si la condition est vérifiée, notre fonction auto-invoquée exécute la méthode getCurrentPosition() qui, rappelons le,
prend une autre méthode en argument.
Si la condition n’est pas vérifiée, un message d’erreur est simplement renvoyé.
Finalement, notre fonction coordonnees se charge de récupérer la latitude et la longitude correspondant à
l’emplacement du visiteur.
Pour cela, nous allons devoir utiliser les propriétés coords, latitude et longitude.
19
ENI RV. 20
<img src="image.gif" width="140" height="76"
name="identifiant"> alert(document.images.identifiant.width);
XHTML //140
<img src="image.gif" width="140" height="76"
id="identifiant"> La propriété javascript
document.images.identifiant document.images["identifiant"].width renvoie une
valeur de type Number dont l'unité est le pixel.
Attention, la valeur de "identifiant" doit être unique.
La propriété javascript
La propriété javascript document.images.length document.images["identifiant"].width accepte
renvoie un tableau contenant tous les objets image de comme valeur :
la page. - un nombre entier dont l'unité est le pixel.
Pour parcourir l'ensemble des images : document.images.identifiant.width =150;
for(var i = 0; i < document.images.length; i++){
alert(document.images[i].src) Attention, la longueur ne peut être changée (sauf dans
} les navigateurs récents, Firefox, Internet explorer >5.5).
links.target
21
ENI RV. 22
La propriété javascript target de l'objet document.links links.search
permet de connaître la valeur de l'attribut HTML ou La propriété javascript search de l'objet document.links
XHTML target. permet de connaître ou de modifier les parametres
<a href="links.html" target="_self">Lien</a> passés dans l'url d'un lien (?
La propriété javascript target de l'objet document.links parametre=aliasdmc¶metre1=aliasdmc).
renvoie une chaîne de caratères, ou vide si pas <a href="document.php?
d'attribut target. parametre=aliasdmc">lien</a>
alert(document.links["identifiant"].target); //_self La propriété javascript search de l'objet document.links
La propriété target de l'objet document.links accepte renvoie une valeur de type String.
une String. alert(document.links["identifiant"].search);
document.links["identifiant"].target ="_blank"; //?parametre=aliasdmc
Exemple La propriété javascript search de l'objet document.links
Nous allons créer tout d'abord un lien : accepte une- valeur de type String précédé d'un "?" .
<a href="document.html" target="_blank">lien</a> document.links["identifiant"].search= "?
alert( document.links[0].target); // L'alerte nous renvoie parametre=aliasdmc2";
donc "_blank »
Modifions le target: Voici les événements possibles de link:
document.links[0].target="_self";
alert( document.links[0].target); // L'alerte nous renvoie onMouseOver la souris survole le lien.
donc "_self » onMouseOut la sourie quitte le lien.
vous avez changé dynamiquement votre target. onClick on clique sur le lien.
onDbleClick on double clique sur le lien.
links.protocol onMouseUp le bouton gauche est relâché.
La propriété javascript protocol de l'objet onMouseDown le bouton gauche est appuyé.
document.links permet de connaître ou de modifier le onFocus le lien prend le focus.
protocol utilisé par le lien (ftp, http,...) onBlur le lien perd le focus.
<a
href="http://aliasdmc.fr/document.html">lien</a>
La propriété javascript protocol de l'objet
document.links renvoie une String qui correspond un 14.LES EVENEMENTS
protocol.
alert(document.links["identifiant"].protocol); //http Une action utilisateur (déplacement de la souris sur
La propriété javascript protocol de l'objet une zone, clic sur un bouton souris, ...) créée un
document.links accepte une String qui correspond un événement que javascript peut alors traiter par un
protocol.
handler associé.
document.links["identifiant"].protocol = "https";
Ainsi, le document HTML deviendra réactif à un
links.title
événement si à cet événement est associée une
La propriété javascript title de l'objet document.links
fonction javascript :
permet de connaître ou de modifier la valeur de
Ces événements peuvent être dans un formulaire ou
l'attribut HTML ou XHTML "title".
bien sur un lien hypertexte.
<a href="document.html" title="aliasdmc">lien</a>
¨Par exemple, soit le code HTML (partie de BODY) :
La propriété javascript title de l'objet document.links
<form>
renvoie une valeur de type String.
alert(document.links["identifiant"].title); <input type= "button " value= "exemple test " onClick=
//aliasdmc "alert(‘ouah!’); ">
La propriété javascript title de l'objet document.links </form>
accepte une String qui correspond à la nouvelle
valeur. Les interventions de l’utilisateur sont classifiées en
document.links["identifiant"].title = "alias\"dmc"; événements, et chaque objet du browser est sensible à
certains événements. L’association d’une série
links.hash d’instructions ou d’une fonction à un couple objet-
La propriété javascript hash de l'objet document.links événement (par l’attribut Onnomdel’événement
permet de connaître ou de modifier l'url du lien interne permettra d’associer un comportement à l’action de
à la page (#nom) ou ancre. l’utilisateur).
<a href="document.html#aliasdmc>lien</a>
La propriété javascript hash de l'objet document.links
renvoie une valeur de type String.
alert(document.links["identifiant"].hash);
//#aliasdmc
La propriété javascript hash de l'objet document.links
accepte une String précédé d'un "#".
document.links["identifiant"].hash= "#aliasdmc2";
22
ENI RV. 23
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
ENI RV. 24
Pour ce faire il suffit des mettre dans la balise le nom <A HREF="#fin " onClick="alert('onClick sur le lien') ">
de l'evenement et de lui associé une fonction , onClick </A>
24
ENI RV. 25
msg=open("","DisplayWindow","width=250,height=100, <SELECT NAME="Page">
scrollbars=no"); <OPTION>-- Choisissez une page ---</OPTION>
msg.document.write("...Début du code HTML..."+ <OPTION></OPTION>
"<P>Pour fermer cette fenêtre,<BR>cliquez à <OPTION></OPTION>
l\'intérieur.</P>" + <OPTION></OPTION>
"<FORM NAME='Formulaire'><INPUT TYPE=text </SELECT>
NAME='ZoneTexte'" +
" onBlur='window.close()'></FORM> <SCRIPT>" +
La fonction qui travaille
"document.Formulaire.ZoneTexte.focus();
</SCRIPT>"+ "...fin du code HTML...");
msg.document.close(); La fonction Choix() sera déclarée dans l'en-tête de la
} page, comme d'hab' et effectuera les tâches
Exemple 2.4. Ouvre une nouvelle page suivantes :
<FORM>
<INPUT • Repérer la sélection de la première liste
TYPE=button • Ne pas réagir si on sélectionne le 1er élément
VALUE="Lien vers... " • Créer un tableau d'options
onClick="document.location.href='page.html'";> • Ecrire les nouvelles options dans la liste
</FORM>
function Choix(form) {
i = form.Rubrique.selectedIndex;
Exemple 3 : if (i == 0) {
return;
Exemple 3.1. }
switch (i) {
<FORM> case 1 : var txt = new Array
<INPUT VALUE=onChange onChange= "alert(‘on ('Materiel','Poissons','Sécurité'); break;
Change du texte’) "> case 2 : var txt = new Array
('Radioactivite','Information','Mesures'); break;
l’utilisateur aprés avoir cliqué sur une zone, la quitte case 3 : var txt = new Array
aprés avoir changé le texte.<BR> ('Philosophie','Psychologie','Humour'); break;
[<I>cliquez sur onChange, modifiez le texte puis }
form.Rubrique.selectedIndex = 0;
cliquez à l’extérieur de la zone</I>]
for (i=0;i<3;i++) {
</FORM> form.Page.options[i+1].text=txt[i];
}
Exemple 3.2. }
25
ENI RV. 26
<OPTION •la plus ancienne consiste à pointer vers l'élément
VALUE="http://www.google.com">Recherche cible à lui associer l'évènement et à lui adjoindre le
</SELECT> nom de la fonction sans les parenthèses.
</FORM>
document.getElementById('mon_element').onNomE
La fonction JavaScript : venement=nom_fonction
Exemple 4.3. Cet exemple permet de modifier le <div id="idevement">Mon évènement javascript <img
contenu de la zone multiligne au passage de src="monimage.gif" ></div>
la souris
<FORM NAME="Info"><BR> Javascript
<TEXTAREA NAME="Texte"
ROWS="8" document.getElementById('mon_element').onclick=
COLS="40"
WRAP="physical"">Passez la function("evt"){alert("action idevement"); }
souris...</TEXTAREA>
</FORM> Pour retirer l'évènement , on peut réassigner une
Et pour chaque lien : chaine vide à l’évènement:
<A HREF="page.html"
onMouseOver="document.Info.Texte.value ='Bla, bla, document.getElementById('mon_element').onclick=
bla..."> ""
Texte du lien</a>
Methode 2:
Associer dynamiquement un évènement à un
élément •la deuxièmement méthode utilise
'addEventListener' et fait partie de l'objet event:
Consiste à ajouter un évènement à une balise dans la
page HTML alors que la page est déjà chargé ou a une addEventListener(nomEvent, nomFonction,
balise HTML creé dynamiquement. typePropagation) accepte comme paramètres :
Méthode 1:
- nomEvent, le nom de l'événement sans le "on",
- nomFonction, nom de la fonction sans les "()" qui va
26
ENI RV. 27
traiter l'événement, - nomFonction, nom de la fonction sans les "()"
- typePropagation, valeur de type Boolean qui spécifie qui va traiter l'événement,
le type de propagation de l'événement. (false : du fils
vers le parent) Par exemple,
function action(event){
Code javascript :
alert("action idevement");
function action(event){
alert("action idevement"); }
}
var monElement = var monElement =
document.getElementById("idevement"); document.getElementById("idevement");
monElement.addEventListener("click", action, false);
monElement.attachEvent("onclick", action);
avec cette méthode on peut adjoindre plusieurs
fonctions pour le même évènement. Fusion des deux méthodes addEventListener et
attachEvent
document.getElementById('mon_element').addEventLi
stener("click', nom_de_la_fonction_1, false); Code html :
27
ENI RV. 28
méthode removeEventListener, pour Internet Explorer function couleur(parametre_couleur){
on doit utiliser detachEvent.
document.getElementById('dv').style.backgroundColor
On peut donc fusionner ces deux méthodes javascript =parametre_couleur;
dans une seule fonction.
}
Code javascript :
</script>
function supprimeEvent(objet, typeEvent, nomFunction,
typePropagation){ </head>
if (objet.addEventListener) { <body>
<div onclick='couleur(this)'
<!DOCTYPE html> style='height:50px;width:50px;background-
color:green'>clic moi</div>
<script type="text/javascript« >
28
ENI RV. 29
</body> clientY Retour de la coordonnée verticale du
pointeur de la souris, par rapport à la
</html>
fenêtre du navigateur.
Gestion globale des evenements avec l’objet event
event fait partie de la gestion globale des événements screenX Retour de la coordonnée horizontale du
par le navigateur et possède des méthodes et pointeur de la souris, par rapport à l'écran
propriétés.
screenY Retour de la coordonnée verticale du
Methodes Description pointeur de la souris, par rapport à l'écran
function couleur(evt){
button Retours le bouton de la souris qui a été
cliqué (0:gauche; 1:centre; 2:droite) var
couleur_cible=evt.currentTarget.style.backgroundCo
clientX Retour de la coordonnée horizontale du lor;
pointeur de la souris, par rapport à la
fenêtre du navigateur. alert(couleur_cible);
29
ENI RV. 30
</script> </head>
</head> <body>
Reprenons le code précédent en le modifiant afin de Exemple 1. création dynamique des évenements
créer dynamiquement au chargement de la page l'
évenement onclick. Pour se faire, on retire l'evenement <!DOCTYPE html>
de la balise et on donne un id à la balise :
<title>source javascript</title>
<div id=" un_div" style='height:50px;width:50px;
<script type="text/javascript">
background-color:green'>clic moi</div>
document.onmousemove=function(evt){
et on ajoute la ligne suivante dans le script
//affiche la position de la souris en X et Y par rapport
window.onload=function(){ au navigateur
document.getElementById("un_div").onclick=couleur document.getElementById(‘z1').value=evt.clientX;
} document.getElementById(‘z2').value=evt.clientY;
window.onload=function(){ document.onkeypress=function(evt){
</FORM>
if ( evt.charCode <48 || evt.charCode >57) { Nom <input type = ="text"" name ="nom "
onkeyDown =“return passer_focus(event)"; > <BR>
return false; }
Prenom <input type = ="text"" name ="prenom" >
} <BR>
} event.keyCode=0 ;
} }
function validerNombre3(evt) {
if (evt.key !='Backspace') // pas backspace Dans le cas où vous avez des balises imbriquées avec
le même événement, les événements se propagent du
return false; bas vers le haut c'est à dire du fils vers le parent
}}
31
ENI RV. 32
} }
33
ENI RV. 34
<input type="button"
<form name="affichage"> <input type="text" OnClick="javascript:window.location.reload()"
name="texte" size=30 value="" /> value="Actualiser">
</form>
</body> <FORM ACTION="" METHOD=POST>
</html> <P><INPUT TYPE=button NAME=Bouton
VALUE="Actualiser maintenant"
5. Raffraichissement d’une page onclick='parent.location="javascript:location.reload()"'>
</FORM></P>
- En HTML, pour auto-Reactualisation d'une
page HTML avec la balise meta 16. LES FORMULAIRES
<head> Introduction aux formulaires
<meta http-equiv="refresh"
content="0;url=chemain_de_t_as_page.html" /> Les formulaires sont la base des échanges entre le site
</head> et le visiteur.
JavaScript ne peut pas échanger d'information à partir
Le "0" indiquant un temps en seconde avant de de fichier texte ou de base de données.
rafraichir la page au moyen de l'URL fourni. Pour permettre au visiteur de transmettre des
informations, les formulaires sont indispensables. Et
Par exemple pour rafraichir la page chaque grâce au JavaScript, il est possible de les rendre très
10 sec pratiques.
<META HTTP-EQUIV="Refresh" CONTENT="10; Le javascript associé aux formulaire permet :
URL=http://www.tonSite.com/page.html"> • d'assister et de guider le visiteur,
• de contrôler la saisie,
- En javascript, • de faire des traitements (calcul, manipulation
<A HREF="#" de chaînes de caractères),
onclick="document.location.reload();return(false)"><B> • d'envoyer les résultats au serveur.
Rafraîchir</B></A>
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.
34
ENI RV. 35
onSubmit Détecte la soumission du formulaire
onReset Détecte la réinitialisation
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
35
ENI RV. 36
Méthodes acceptées :
focus, blur
Evénements acceptés :
onFocus, onBlur, onChange
Les boutons INPUT type="button"
Propriétés acceptées :
name | value | defaultvalue | size | maxlength | disabled | readOnly | class | style
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.
Les radio-boutons INPUT type="radio"
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
Les radio-boutons INPUT type="checkbox"
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.
36
ENI RV. 37
Cela peut être une adresse mail, un résultat de traitement, l'heure, un cookie ou toute autre information.
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.
37
ENI RV. 38
focus Donne le focus à la liste
blur Reprend le focus
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.
<HTML>
<BODY>
<B>
38
ENI RV. 39
<FORM action="http://unsite.com/prog/ajoutermembre" method="post">
Votre nom:<INPUT TYPE="TEXT" NAME="name"> <BR>
Votre Email :<INPUT TYPE="TEXT" NAME="Email"> <BR>
Votre filiere:
<SELECT NAME="filiere" SIZE="1">
<OPTION VALUE="GB"> Genie Logiciel et Base de données</OPTION>
<OPTION VALUE="SR"> Système et réseau </OPTION>
</SELECT>
<BR>
Sexe : <br>
<INPUT type="radio" name="genre" value="homme"> Homme<BR>
<INPUT type="radio" name="genre" value="femme"> Femme<BR>
Comment : <BR>
<TEXTAREA NAME="comment" COLS="20" ROWS="5" >
</TEXTAREA> </BR>
<INPUT TYPE="SUBMIT" VALUE="Submit">
<INPUT type="reset" value =”Reset”>
</FORM>
</B>
</BODY>
</HTML>
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 :
• document.forms["general"]
ou
• document.forms[0]
39
ENI RV. 40
ou
• document.general
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
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";
document.forms["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 :
document.forms["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 élément.
document.forms["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.
40
ENI RV. 41
<FORM name="changer">
<INPUT type="text" name="zonetexte" value="Valeur initiale">
<INPUT type="button" value="Changer la zone de texte"
onClick=' document.forms["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=' document.forms["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 document.forms.elements. 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 :
<FORM name="formfocus">
<INPUT type="text" name="champtexte" value="contenu" onFocus="window.status=this.name"
onBlur="window.status=''">
</FORM>
<FORM>
<INPUT type="text" name="zonedetexte" value="Valeur initiale">
<INPUT type="button" value="Changer le contenu"
onClick=' this.form.zonedetexte.value="NOUVEAU" '>
</FORM>
Grâce à this.form, on peut accéder au formulaire de l'élément en cours. Le chemin pour accéder à zonedetexte est
ensuite classique.
Un autre exemple
41
ENI RV. 42
6. L'accès aux éléments de type INPUT
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(this.form.os)">
<SCRIPT language="javascript">
function testerRadio(radio) {
for (var i=0; i<radio.length;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>
43
ENI RV. 44
<script language="javascript">
function evaluation(){
var selectione="";
var Num=0;
for (i=0; i<document.forms.f.dmc.options.length; i++) {
if (document.forms.f.dmc. options[i].selected ) {
Num=Number(Num+1);
selectione = selectione+"; "+document.forms.f.dmc.options[i].text;
}
}
alert(Num+" choix : "+selectione);
}
</script>
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é
LES RADIO-BOUTONS
<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(this.form.os)">
<SCRIPT language="javascript">
function testerRadio(radio) {
for (var i=0; i<radio.length;i++) {
if (radio[i].checked) { alert("Système = "+radio[i].value) }
}
}
</SCRIPT>
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.
44
ENI RV. 45
aux événements générés par l'utilisateur. }
Il est nécessaire de bien connaître le principe des </SCRIPT>
formulaires HTML pour tirer partie de ces astuces.
Dans le corps
1 - Donner le focus (curseur) à un élément de <FORM name="form3">
formulaire <INPUT type="button" name="bouton"
Le premier champ texte a le focus au chargement de la value="Cliquez-moi aussi !"
page. onClick="CompteClic(this.form)">
Cliquez sur les boutons pour donner le focus aux </FORM>
autres éléments. La prise de focus est possible pour
tous les types d'objets. 4 - Valider un formulaire par JavaScript
Il est souvent utile de vérifier la saisie d'un formulaire
avant de le valider.
L'idéal est de créer un bouton (de type "button" et pas
Le script "submit") qui appelle une fonction javascript qui
contrôle la saisie et soumet ou non le formulaire.
<FORM name="form1"> Voyons un exemple simple de test de saisie d'un email.
<INPUT type="texte" name="champ1">
<INPUT type="button" value="<- Donne le focus" Saisissez une adresse mail valide (du type
onClick="this.form.champ1.focus()"> [email protected])
<SELECT name="champ2" >
<OPTION>Ceci est la ligne n° 1</OPTION> Le script
<OPTION>Ceci est la ligne n° 2</OPTION> Dans l'entête de la page
</SELECT> <SCRIPT language="javascript">
<INPUT type="button" value="<- Donne le focus" function ValiderMail(formulaire) {
onClick="this.form.champ2.focus()"> if (formulaire.mail.value.indexOf("@",0)<0)
<TEXTAREA rows="2" cols="15" name="champ3"> {alert("Adresse mail saisie invalide.\nLe formulaire ne
<INPUT type="button" value="<- Donne le focus" sera pas validé.")}
onClick="this.form.champ3.focus()"> else {
</FORM> alert("Formulaire validé.\nPour valider un
formulaire : formulaire.submit()");
Pour donner le focus à un champ de formulaire à // Pour valider le formulaire en javascript :
l'ouverture de la page, il faut ajouter cette ligne dans la // formulaire.submit()
balise BODY : }
onLoad="document.forms['nomduform'].elements['nom }
champ'].focus()" </SCRIPT>
Dans le corps de la page
2 - Changer le libellé d'un bouton <FORM name="form4" action="">
Cliquez le bouton pour changer son libellé. Saisissez une adresse mail valide (du type
[email protected])
Le script ;<INPUT type="texte" name="mail">
<FORM name="form2"> <INPUT type="button" name="bouton"
<INPUT type="button" name="bouton" value="Valider" onClick="ValiderMail(this.form)">
value='Cliquez-moi !' onClick="this.value='Touché !'"> </FORM>
</FORM>
5 - Vider un champ à la prise de focus
3 - Ne permettre qu'un seul clic sur un bouton Par exemple, un champ de saisie de login avec à
Accepte le premier clic sur le bouton et empêche les l'origine "Votre login".
suivants. Si vous cliquez sur le champ, "Votre login" disparaît.
Utile pour éviter de recevoir 3 fois le même message
quand un visiteur s'excite sur le bouton "Envoyer" ! Le script
Le script <FORM name="form5">
Dans l'entête de la page <INPUT type="texte" name="login" value='Votre
<SCRIPT language="javascript"> login' onFocus="if (this.value=='Votre login')
var nbclic=0 // Initialisation à 0 du nombre de clic {this.value=''}">
function CompteClic(formulaire) { // Fonction appelée </FORM>
par le bouton
nbclic++; // nbclic+1 6 - Détecter la touche [Entrée] sur un formulaire
if (nbclic>1) { // Plus de 1 clic Utile dans les formulaires de recherche, où la plupart
alert("Vous avez déjà cliqué ce bouton.\nLe des utilisateurs tapent [Entrée] pour valider la
formulaire est en cours de traitement... Patience"); recherche, sans cliquer sur le bouton "Rechercher".
} else { // 1 seul clic
alert("Premier Clic.");
Entrez un mot :
}
45
ENI RV. 46
CONTROLES DE SAISIE DANS UN FORMULAIRE
L'appui sur [Entrée] déclenche la soumission du
formulaire qu'il est possible de détecter avec Cette page montre comment contrôler la bonne saisie
l'événement onSubmit. dans un formulaire. Il est utile de lire l'article sur les
La balise FORM peut donc s'écrire : chaînes de caractères pour comprendre les fonctions
<FORM name="formulaire" utilisées.
onSubmit="maFonction()">
1 - Est-ce un nombre ?
Il peut être utile de vérifier que la saisie dans un champ
de formulaire est bien un nombre : saisie de quantités,
7 - Empêcher la saisie dans un champ de prix...
Dès que la curseur souris arrive sur ce champ, il est Saisir ici : :
enlevé. Cela rend impossible la saisie ou la Soit nb le champ à tester. Si !(isNaN(nb)) retourne true,
modification de son contenu. alors nb est un nombre.
L'astuce est d'utiliser l'événement onFocus qui détecte 2 - Est-ce une date ?
l'arrivée du curseur dans le champ. Cette fonction vérifie la saisie d'une date au format
Voici la ligne décrivant la zone : jour/mois/année.
<INPUT type="text" value="Non modifiable" Entrez une date au format JJ/MM/AAAA
name="champ" onFocus="this.blur()"> Voici la fonction CheckDate(d), où d est une chaîne de
La méthode focus() appliquée au champ retire le caractères.
curseur. function CheckDate(d) {
// Cette fonction vérifie le format JJ/MM/AAAA saisi
Avec cette ligne, il est possible de rediriger le curseur et la validité de la date.
vers un autre champ du formulaire : // Le séparateur est défini dans la variable
<INPUT type="text" value="Non modifiable" separateur
name="champ" onFocus="this.form.champ2.focus()"> var amin=1999; // année mini
La méthode focus() appliquée à champ2 active le var amax=2005; // année maxi
curseur. var separateur="/"; // separateur entre
jour/mois/annee
var j=(d.substring(0,2));
var m=(d.substring(3,5));
8 var a=(d.substring(6));
- Alimenter un champ texte au passage de la souris var ok=1;
Pour alimenter un champ texte au passage de la souris if ( ((isNaN(j))||(j<1)||(j>31)) && (ok==1) ) {
sur un objet (ici une cellule d'un tableau), jbvillier, alert("Le jour n'est pas correct."); ok=0;
propose cette solution : }
<script language=javascript> if ( ((isNaN(m))||(m<1)||(m>12)) && (ok==1) ) {
/* ti script by [email protected] */ alert("Le mois n'est pas correct."); ok=0;
function focusOn() { }
document.forms["form11"].champtexte.value = "Hé if ( ((isNaN(a))||(a<amin)||(a>amax)) && (ok==1) ) {
hop" ; alert("L'année n'est pas correcte."); ok=0;
} }
</script> if ( ((d.substring(2,3)!=separateur)||
(d.substring(5,6)!=separateur)) && (ok==1) ) {
<form name="form11"> <table width="66%" alert("Les séparateurs doivent être des
height="28%" border="1"> "+separateur); ok=0;
<tr> }
<td width="57%" height="26" if (ok==1) {
onMouseOver="focusOn()">passez la souris ici</td> var d2=new Date(a,m-1,j);
<td width="43%"><input type="text" j2=d2.getDate();
name="champtexte"></td> m2=d2.getMonth()+1;
</tr> a2=d2.getFullYear();
</table> if (a2<=100) {a2=1900+a2}
</form> if ( (j!=j2)||(m!=m2)||(a!=a2) ) {
alert("La date "+d+" n'existe pas !");
Ce qui donne ok=0;
}
}
passez la souris ici
return ok;
}
Voir des exemples de contrôles de saisies dans un
formulaire 3 - Est-ce un mail ?
Pour vérifier qu'un mail est valide, il suffit de tester la
46
ENI RV. 47
présence de @ et du point.
function verifiermail(mail) { if(document.forml.depart.value.charAt(i)< "0" ||
if ((mail.indexOf("@")>=0)&&(mail.indexOf(".")>=0)) document.forml.depart.value.charAt(i)> "9")
{ return true { alert("date de départ non valide!");
} else { alert("Mail invalide !"); return false document.forml.depart.focus();
} return false;
} }
Cette fonction vérifie la présence du caractère @ et }
du . pour vérifier la validité. Si ces 2 caractères sont </script>
trouvés, la fonction retourne true sinon, elle affiche un </head>
message et retourne false.
Entrez une adresse mail <body>
<p align="left"><font size="3" face="Arial, Helvetica,
4. Exemple : Utilisation d'un script pour valider les sans-serif">Pour effectuer
informations saisies dans un formulaire une reservation en ligne, veuillez compléter le
HTML formulaire suivant. Vous recevrez une réponse dans
de brefs délais.</font></p>
<html>
<form name="forml" method="post" action="<?
<head>
php echo $_SERVER['PHP_SELF']; ?>"
<title>Reservation en ligne</title>
onSubmit="return verif_champs()">
<table align="center" border="0" cellspacing="2"
<script type="text/javascript">
cellpadding="0">
<tr><td align="right">Nom:</td><td><input type="text"
function verif_champs()
name="nom" size="32"></td>
{
</tr>
if(document.forml.nom.value == "")
<tr><td align="right">E-mail:</td><td><input
{ alert("Veuillez entrer votre nom SVP");
name="email" type="text" value="" size="32">
document.forml.nom.focus();
</td>
return false;
</tr>
}
<tr><td align="right">Adresse:</td><td><textarea
if(document.forml.email.value == "")
name="adresse" cols="24" rows="3"></textarea></td>
{
</tr>
alert("Veuillez nous communiquer votre adresse email
<tr><td align="right">Nb de personnes:</td>
pour que nous puissons vous repondre.");
<td><select name="perso" size="1">
document.forml.email.focus();
<option value="1">1</option>
return false;
<option value="2">2</option>
}
<option value="3">3</option>
if(document.forml.email.value.indexOf('@') == -1)
<option value="4">4</option>
{
<option value="5">5</option>
alert("Adresse Email invalide!");
<option value="6">6</option>
document.forml.email.focus(); return false;
<option value="7">7</option>
}
<option value="8">8</option>
<option value="9">9</option>
if(document.forml.email.value.length <7)
<option value="10">10</option>
{ alert("Adresse Email invalide!");
<option value="11">11</option>
document.forml.email.focus(); return false;
<option value="12">12</option></select></td>
}
</tr>
<tr><td align="right">Nb de chambres:</td>
if(document.forml.adresse.value == "")
<td><select name="chamb" size="1">
{
<option value="1">1</option>
alert("Veuillez nous communiquer votre
<option value="2">2</option>
adresse, merci.");
<option value="3">3</option>
document.forml.adresse.focus();
<option value="4">4</option></select></td>
return false;
</tr>
}
<tr><td align="right">Date d'arrivée*:</td><td><input
type="text" name="arrive" size="5"></td>
var i;
</tr>
for(i=0;i<document.forml.arrive.value.length;i++)
<tr><td align="right">Date de départ*:</td><td><input
if(document.forml.arrive.value.charAt(i)< "0" ||
type="text" name="depart" size="5"></td>
document.forml.arrive.value.charAt(i)> "9")
</tr>
{ alert("date d'arrivée non valide!");
<tr><td align="right">Pension compléte</td>
document.forml.arrive.focus(); return false;
<td><p><label><input type="radio" name="pension"
}
value="oui" checked>Oui</label>
for(i=0;i<document.forml.depart.value.length;i++)
47
ENI RV. 48
<br><label><input type="radio" name="pension" A cette dernière nous lui associerons un événement,
value="non">Non</label> généralement un "onclick" avec la méthode reset().
<br></p></td> <input type="button"
</tr> onClick="document.forms.f.reset()">
<tr><td align="right">Message:</td><td><textarea
name="mess" cols="24" rows="5"></textarea></td> Par exemple :
</tr> Taper du texte dans le champ.
</table>
<p align="center"> <form name="f">
<input type="hidden" name="action" <input type="text" name="textfield">
value="submitted"> <input type="button"
<input type="submit" name="Submit" value="Envoyer"> onClick="document.forms.f.reset()">
</p> </form>
</form>
<p align="left"><font size="3" face="Arial, Helvetica, submit()
sans-serif">* date au format JJMMAA,
merci.</font></p> Pour envoyer un formulaire via le javascript, il ne faut
</body> plus utiliser la balise HTML <input type="submit">
</html> mais la balise HTML <input type="button">.
A cette dernière nous lui associerons un événement,
Capture d’écran généralement un "onclick" avec la méthode submit().
<input type="button"
onClick="document.forms.f.submit()">
Par exemple :
<form name="f">
<input type="text" name="champ">
<input type="button"
onClick="document.forms.f.submit()">
</form>
image
Par exemple :
reset()
Méthode : window.document.forms.reset()
Pour remettre à jour un formulaire via le javascript, il ne Réinitialise un formulaire
faut plus utiliser la balise HTML <input type="reset">
mais la balise HTML <input type="button">. Exemple reset
48
ENI RV. 49
<FORM> document.getElementsByName("fruit")[2].checked =
true;
Champ 1 : <INPUT TYPE="text" NAME="champ1"
VALUE="défaut 1"><BR> </script>
<INPUT TYPE="button" VALUE="Rétablir les valeurs Avec JavaScript, il est possible de programmer les
par défaut" onClick="this.form.reset();"> célèbres cookies.
Nous allons voir ici à quoi servent les cookies et
</FORM> comment stocker et récupérer des informations grâce à
eux.
Méthode : window.document.forms.submit() En bas de cette page, vous trouverez des exemples de
programmation de cookies.
Soumet un formulaire
1 - A quoi servent les cookies ?
Exemple submit Les cookies sont très utilisés, par tous les sites
commerciaux et par de plus en plus de sites perso. La
<FORM ACTION="http://www.toutjavascript.com" raison est simple. Un cookie permet de stocker de
manière permanente des informations sur le poste du
TARGET="_blank" METHOD="post">
visiteur, qui pourront être récupérées lors des futures
visites.
Champ 1 : <INPUT TYPE="text" NAME="champ1" Voyons quelques unes des principales informations
VALUE="défaut 1"><BR> stockées dans les cookies :
• Le nombre de visites, la date de la dernière
Champ 2 : <INPUT TYPE="text" NAME="champ2" visite,... (Exemple : Tout JavaScript.com)
VALUE="défaut 2"><BR> • Un identifiant et un mot de passe pour une
reconnaissance automatique du visiteur
<INPUT TYPE="button" VALUE="Soumettre ce (Exemple : CDNow)
formulaire à http://www.toutjavascript.com" • Une liste de mots-clés utilisés dans les
onClick="this.form.submit()"> moteurs de recherche pour cibler les publicités
à afficher (Exemple : beaucoup de moteurs de
</FORM> recherche)
• Une liste de paramètres de préférences de
Méthode : navigation pour personnaliser la page
window.document.getElementsByName() présentée (Exemple : Mon Yahoo !)
• Des informations à transférer d'une page à
Retourne un objet HTML à partir de son nom l'autre du site.
• x = Math.round(5,5) donne x = 5
• x = Math.max(6,7.25) donne x =
7.25
min(Nombre1, Retourne le plus petit des deux entiers donnés en • x = Math.max(-8.21,-3.65) donne x
Nombre2) paramètre = -3.65
• x = Math.max(5,5) donne x = 5
• x = Math.min(6,7.25) donne x = 6
• x = Math.min(-8.21,-3.65) donne x
min(Nombre1, Retourne le plus petit des deux entiers donnés en = -8.21
Nombre2) paramètre
• x = Math.min(5,5) donne x = 5
• x = Math.pow(3,3) donne x = 27
pow(Valeur1,
Retourne le nombre Valeur1 à la puissance Valeur2
Valeur2) • x = Math.pow(9,0.5) (racine
carrée) donne x = 3
• x = Math.random() donne x =
random() Retourne un nombre aléatoire compris entre 0 et 1
0.6489534931546957
Retourne la racine carrée du nombre passé en • x = Math.random() donne x =
sqrt(Valeur)
paramètre 0.6489534931546957
Logarithmes et exponentielle
Méthode description
Math.E Propriété qui retourne le nombre d'Euler (environ 2.718)
52
ENI RV. 53
Math.exp(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
Math.log(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
Math.PI Retourne la valeur du nombre PI, soit environ 3.1415927
Math.sin(valeur) Retourne le sinus de la valeur entrée en paramètre (doit être donnée en radians)
Math.asin(valeur) Retourne l'arcsinus de la valeur entrée en paramètre (doit être donnée en radians)
Math.cos(valeur) Retourne le cosinus de la valeur entrée en paramètre (doit être donnée en radians)
Math.acos(valeur)Retourne l'arccosinus de la valeur entrée en paramètre (doit être donnée en radians)
Math.tan(valeur) Retourne la tangente de la valeur entrée en paramètre (doit être donnée en radians)
Math.atan(valeur) Retourne l'arctangente de la valeur entrée en paramètre (doit être donnée en radians)
1. Nom_de_l_objet = new Date() La date est stockée dans une variable sous la forme
cette syntaxe permet de stocker la date et d'une chaîne qui contient le jour, le mois, l'année,
l'heure actuelle l'heure, les minutes, et les secondes. Il est donc difficile
2. Nom_de_l_objet = new Date("mois jour, d'accéder à un seul élément d'un objet date, étant
année heures:minutes:secondes") donné que chacun des éléments peut avoir une taille
les paramètres sont une chaîne de caractère variable. Heureusement, les méthodes de l'objet Date
sous cette notation fournissent un moyen simple d'accéder à un seul
élément, ou bien de le modifier.
3. Nom_de_l_objet = new Date(year, month,
Leur syntaxe est la suivante:
day)
Objet_Date.Methode()
les paramètres sont trois entiers séparés par
des virgules.
Les paramètres omis sont mis à zéro par Connaître la date
défaut
4. Nom_de_l_objet = new Date(year, month, Les méthodes dont le nom commence par le radical
day, hours, minutes, seconds) get (mot anglais qui signifie récupérer) permettent de
les paramètres sont six entiers séparés par récupérer une valeur:
des virgules.
Les paramètres omis sont mis à zéro par
défaut
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:
Méthode Description Type de valeur en paramètre
Permet de fixer la valeur du jour du Le paramètre est un entier (entre 1 et 31) qui correspond au jour du
setDate(X)
mois mois
Le paramètre est un entier qui correspond au jour de la semaine:
Permet de fixer la valeur du jour de
setDay(X) • 0: dimanche
la semaine
• 1: lundi ...
setHour(X) Permet de fixer la valeur de l'heure Le paramètre est un entier (entre 0 et 23) qui correspond à 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
Le paramètre est un entier (entre 0 et 11) qui correspond au mois:
setMonth(X) Permet de fixer le numéro du mois • 0: janvier
• 1: février ...
Le paramètre est un entier représentant le nombre de secondes
setTime(X) Permet d'assigner la date
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.
54
ENI RV. 55
decodeURI("le%20lien%205/;?#"); else {alert(" E R R E U R !\n\nLe mot ["+lemot+"] n'est
Ce qui vous donne : le lien 5/;?# pas présent !!!!"); }
encodeURIComponent }
La méthode encodeURIComponent remplace toutes
les caractères. Elle compatible avec Internet Explorer
5.5, Netscape6+, FireFox. 2ème exemple : Est-ce un login valide ?
La principale utilité des expressions régulières en
Exemple : javascript est de vérifier la saisie dans un formulaire.
alert(encodeURIComponent("le lien 5;?#")); Cette fonction vérifie que le login saisi est bien
ce qui vous donne : le%20lien%205%3B%3F%23 formaté : de 3 à 8 caractères et sans caractères
decodeURIComponent spéciaux (uniquement des chiffres et des lettres).
La méthode javascript decodeURIComponent() vous
permettra de faire l'inverse. Saisissez un login :
Saisissez un login :
Exemple : Voici le code correspondant :
decodeURIComponent("le%20lien%205%3B%3F function VerifLogin(login) {
%23");
var exp=new RegExp("^[a-zA-Z0-9]{3,8}$","g");
Ce qui vous donne : le lien 5;?#
if ( exp.test(login) ) {alert("Le login ["+login+"] est
23. LES EXPRESSIONS REGULIERES valide :)"); }
else {alert(" E R R E U R !\n\nLe login ["+login+"] n'est
Les expressions régulières sont des objets qui existent pas valide !!!!"); }
dans la plupart des langages de programmation, mais }
qui sont mal connus, car relativement complexes.
Les expressions régulières permettent de réaliser des
traitements sur des chaînes de caractères, traitements
qui peuvent être assez complexes à réaliser sans l'aide
de ces fameuses expressions.
Mot à recherche :
Voici le code correspondant :
function SearchRegExp1(f) {
var lemot = f.mot.value
var exp=new RegExp(lemot,"g");
if ( exp.test(f.texte.value) ) {alert("Le mot ["+lemot+"] a
été trouvé :)"); }
Déclarer un objet RegExp
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.
55
ENI RV. 56
Motif Signification
^ Début de ligne ou de chaîne
$ Fin de ligne ou de chaîne
. N'importe quel caractère
x|y Caractère x ou y
[abc] Groupe de caractères : n'importe lequel de ceux entre crochets
[a-z] Groupe de caractères : n'importe lequel de a à z
[^0-9] Groupe de caractères : tous sauf ceux entre crochets
(x) Expression parenthésée (mémorisée)
* Caractère précédent de 0 à X fois
+ Caractère précédent de 1 à X fois
? Caractère précédent de 0 à 1 fois
{n} Caractère précédent exactement n fois
{n,} Caractère précédent au moins n fois
{n,m} Caractère précédent entre n et m fois
\ N'est pas un caractère, sert de caractère d'échappement
\\ 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
56
ENI RV. 57
les éléments qui correspondent à l'expression
L'objet RegExp possède plusieurs méthodes qui ont régulière.
différents effets.
Nous avons déjà vu la méthode test() qui valide une Extraction d'adresse mails dans un texte
chaîne de caractères en fonction d'un motif.
La méthode exec() retourne un tableau des occurences Texte à traiter :
répondant aux critères du motif.
Sur l'objet string, il existe également des méthodes qui Encore une utilisation de la méthode match() : function
attendent en paramètres une expression régulière. ExtraireMail(chaine) {
La méthode search() permet de trouver des var exp=new RegExp("[a-zA-Z0-9\-_]+[a-zA-Z0-9\.\-
occurences répondant aux critères du motif. _]*@[a-zA-Z0-9\-_]+\.[a-zA-Z\.\-_]{1,}[a-zA-Z\-_]+","g");
La méthode replace() permet de trouver et de var tabMail=chaine.match(exp);
remplacer des occurences répondant aux critères du if (tabMail==null) {alert("Problème dans
motif. l'expression !");}
La méthode match() permet de trouver des occurences else {
répondant aux critères du motif. var affichage="Nombre de mails trouvés = " +
tabMail.length + "\n";
Exemple d'utilisation de split() et match() for (var i=0;i<tabMail.length;i++){
affichage=affichage + " ["+ tabMail[i] + "]\n";
Supposons une liste de noms séparés par des virgules, }
des espaces ou des points-virgules, mais dont le alert(affichage);
format n'est pas uniforme. }
Les expressions régulières vont nous permettre de }
créer un tableau avec tous les noms correctement
isolés. Extraire les paramètres d'une url
Pour l'extraction par match(), cette fonction est utilisée : Remplacer des caractères
function ExtraireNom2(chaine) {
var exp=new RegExp("[a-zA-Z\-]+","g"); Les expressions régulières permettent également de
var tabNom=chaine.match(exp); remplacer des caractères dans une chaîne.
if (tabNom==null) {alert("Problème dans Chaine AVEC les accents :
l'expression !");}
else { Chaine SANS les accents :
var affichage="Nombre de noms trouvés = " + Ici, on remplace tous les "e" accentés par un "e".
tabNom.length + "\n"; chaine=chaine.replace(/[éèêë]/g,"e");
for (var i=0;i<tabNom.length;i++){
affichage=affichage + " ["+ tabNom[i] + "]\n"; Rendre un mail cliquable
}
alert(affichage); La fonction remplace permet également de retenir des
} valeurs trouvées dans l'expression et de les réutiliser
} dans la chaîne de remplacement.
La méthode match() créé un tableau qui contient tous Par exemple pour la chaîne de texte suivante :
57
ENI RV. 58
Ainsi, vous ne risquez pas de voir des données
Bonjour, vous pouvez nous joindre sur confidentielles récupérées à votre insu.
[email protected] ou [email protected] De même, il n'est pas possible de lister les
A bientôt. logiciels copiés et non enregistrés. Impossible
aussi de détruire des fichiers indispensables ou
Après traitement, la chaîne de texte devient : d'introduire un virus sur le poste d'un visiteur.
Bonjour, vous pouvez nous joindre sur Certains diront que JavaScript possède des
[email protected] ou [email protected] fonctions pour lire des fichiers texte. En fait,
A bientôt. javascript permet d'intégrer des applets Java
ou ActiveX qui elles sont capables d'agir sur le
function TJS_EmailCliquable(email) { disque dur. Il ne s'agit pourtant pas de
var exp=new RegExp("([a-zA-Z0-9\.\-_]+@[a-zA-Z0- javascript pur : si vous désactivez Java et
9\-_]+\.[a-zA-Z0-9]{2,})","g"); ActiveX, rien ne se passera.
return email.replace(exp,"<A href='mailto: JavaScript seul ne peut pas non plus récupérer
$1'>$1</A>"); l'adresse IP d'un visiteur. Il est indispensable
} également de passer par des appels à Java ou à
ActiveX.
Rendre une adresse url cliquable
3 - Les limites de JavaScript
Je vous invite à visiter le site de mon partenaire
http://www.microscop.net/tjs.html ! La principale limite de JavaScript est qu'il ne
permet pas de lire et d'écrire sur le disque dur
Après traitement, la chaîne de texte devient : du visiteur (en dehors des cookies) et du
Je vous invite à visiter le site de mon partenaire serveur.
http://www.microscop.net/tjs.html! Il est donc impossible en javascript de générer
par exemple un fichier de connexions sur le
function TJS_UrlCliquable(url) { serveur, ou un compteur de visites sur une
var exp1=new RegExp("((ht|f)tps?://.*)[\\s]+","gi"); page donnée.
return url.replace(exp1,"<A href='$1'>$1</A>"); De même, JavaScript ne peut pas s'interfacer
} avec une base de données. Impossible alors de
concevoir un forum de discussion, un script de
LIMITES JAVASCRIPT sondage ou de vote, dont les données sont
stockées, soit dans un fichier, soit en base sur
1 - Ce que permet JavaScript le serveur. Impossible aussi de lier un
Le language JavaScript est parfaitement adapté pour catalogue en base sur le serveur à votre
des traitements sur le poste du navigateur. Voici boutique en ligne.
quelques exemples de cas où JavaScript est efficace
(voire irremplaçable) : 4 - Les alternatives
• Vérification de saisie dans des formulaires Il existe une multitude de technologies actuellement
(Adresse, email) qui permettent de combler les lacunes de javascript.
• Calculs simples suite à des saisies de On peut les séparer en 2 catégories :
formulaire (Tarifs, calculatrice) • Celles dont le code est exécuté sur le poste du
• Moteur de recherche (base de recherche visiteur (Flash , Java etc)
définie par le webmaster) • Celles dont le code est exécuté par le serveur
• Gestion des dates et des heures (Date du jour, qui renvoie une page au format HTML ( PHP,
Date de mise à jour, Calendriers) JSP,ASP , CGI etc)
• Gestion des cookies (Sauvegarde d'information
: nombre de visites, caddie virtuel)
• Gestion de la navigation (Menus dynamique,
popup)
• Animations graphiques (Dynamic HTML,
MouseOver, bannières rotatives, jeux)
• etc...
2 - JavaScript et la sécurité