Archives de catégorie : E – Javascript

Introduction à Javascript

Qu’est ce que Javascript ?

Techniquement Javascript est un langage de programmation interprété, et plus précisément un langage de script client. Sa syntaxe est proche de celles de java…mais il est différent de java.

Quelques caractéristiques

Javascript …

  • est un langage de programmation interprété
  • léger, il présente un jeu d’instruction réduit,
  • événementiel et orienté objet
  • est d’ utilisation est libre…
  • est intégrable directement dans des pages HTML et est compatible (+ ou -) avec les différents navigateurs (Firefox, IE, Netscape, Opera…),
  • connait en partie l’environnement client, et totalement les objets du navigateur

On s’en sert notamment pour :

  • mettre du texte dynamique dans une page
  • valider localement des données, comme celle d’un formulaire
  • réagir aux actions de l’utilisateur (action souris, saisie,…)
  • gérer des cookies

Un peu d’histoire

Javascript a été créé par Netscape en 1995 et portait alors le nom de LiveScript, pour étendre les possibiltés de HTML.
En 1995, Nestcape s’ associe avec le constructeur Sun, et rebaptise (pour leur faire plaisir ?) son langage Javascript.
Microsoft développe parallèlement un langage très similaire Jscript.
La guerre des standards n’étant pas loin, un organisme de normalisation Européen l’ECMA, sor la norme ECMA-262 pour le langage officiellement appelé ECMAScript…

Environnement de travail conseillé

Afin de pouvoir tester le langage et rédiger les programmes dans de bonnes conditions, vous pouvez utiliser un environnement de développement évolué comme Aptana Studio, (studio gratuit permettant l’édition et le deboggage) disponible sur http://www.aptana.com/
Une solution un peu moins lourde consiste à utiliser le plugin FireBug, disponible sur http://www.getfirebug.com/, pour le navigateur FireFox

Une excellente video, d’introduction à Javascript, de Douglas Crockford (architecte Javascript chez Yahoo!) est visible sur http://video.yahoo.com/video/play?vid=111593

ou ci-dessous -VO américaine – durée 30mn


Coder en Javascript

Quelques règles de syntaxe

Les mots clés sont en minuscules, tout le reste est en minuscule ou majuscule mais sensible à la casse.
Les variables sont non typées, et peuvent être ou non déclarées avec le mot clé ‘var’. Seules les déclarations de variables locales au sein d’une fonction sont obligatoires.

var ma_variable1;
autre_variable_sans_declaration = « au revoir » ;

Les chaines peuvent être entre guillemets ou entre cotes, et inclure symétriquement des cotes ou des guillemets . Une chaine peut être ‘éclatée’ sur plusieurs lignes grace au caractère ‘\’ :

chaine1 = « l’apostrophe est autorisée ici »
chaine2 = ‘ et la c’est le  » ‘
document.write(« bonjour \
tout le monde »)
// ceci est un commentaire sur une ligne
/* ceci est un
commentaire sur
plusieurs lignes*/

Comment inclure du code

Un programme javascript peut apparaître à de multiple endroits et se présenter de différentes façons dans un document HTML.
Le moyen le plus répandu est d’utiliser une balise spéciale, la balise <SCRIPT>

<script type= »text/javascript »>
ici_des_instructions_javascripts
</script>

Compatibilité avec les vieilles versions de navigateur

C’est de moins en moins le cas mais dans le cas où de vieux navigateurs ne supporteraient le langage javascripts, afin d’éviter une erreur, on pourra masquer le code par des commentaires HTML (un navigateur supportant javascript, ignorera ces caractères…)

<script type= »text/javascript »>
<!–
document.write(« re bonjour »)
//–>
</script>

balise <SCRIPT> dans le corps du document

<html>
<body>
<script type= »text/javascript »>
document.write(« salut »)
</script>
</body>
</html>

balise <SCRIPT> dans l’entête du document

<html>
<head>
<script type= »text/javascript »>
document.write(« salut »)
</script>
</head>
<body>

</body>
</html>

javascript dans un fichier externe

Il est possible également de faire appel � du code stocké dans un fichier extérieur au document HTML. La balise <SCRIPT> fera simplement référence � un nom de fichier sur le serveur ! Cela peut avoir plusieurs avantages :

  • alléger la page HTML et la rendre plus lisible
  • factoriser le code pour plusieurs pages HTML, et le rendre ainsi réutilisable et plus facilement maintenable

<html>
<head>
<script src= »mon_fichier_externe.js »></script>
</head>
<body>
</body>
</html>

fonctions javascript

Ces fonctions seront généralement définies dans l’entête du document HTML, et peuvent être appelées plus loin dans le code

<html>
<head>
<script type= »text/javascript »>
function message()
{
alert (« Attention le nombre x vaut 0!!! »)
}

var x;

if (x==0) message();

</script>
</head>
<body>

</body>
</html>

gestion d’événement en javascript

Lorsqu’un événement utilisateur survient : clic de souris, chargement de la page, survol d’une image, … on peut déclarer du code javascript comme gestionnaire de cet événement (event handler).

Les instructions du programme déclenché pourront directement apparaître derrière l’événement, dans l’attribut d’une balise HTML, ou sous forme d’appel d’une fonction définie en amont dans la page.

<html>
<head>
<script type= »text/javascript »>
function message_bienvenue()
{
alert(« au chargement de la page je m’affiche ! »)
}
</script>
</head>
<body onload= »message_bienvenue() »>
</body>
</html>

URLs javascript

Une balise HTML qui a comme attribut un URL (une adresse Internet) peut accueillir du code Javascript, en lieu et place de cet URL.
Ainsi les balises suivantes :

<FORM ACTION= »url »…>,
<A href= »url »…>
<IMG src= »url »…>
<LINK REL=… href= »url »…>
<AREA href= »url »…>

acceptent un appel � du code javascript .

Dans un URL standard c’est en général le protocole ‘http:’ qui est utilisé et qui marque le début de l’URL. Ici on utilisera le pseudo protocole ‘javascript:’

<FORM NAME= « form1 » ACTION= »javascript:valider_formulaire_avant_envoi() »…>
Entrer un nom <INPUT TYPE= »TEXT »…>

</FORM>
// ici l’action n’est pas l’appel d’un document ou d’un programme du serveur
// mais l’appel de code javascript interne

Quelques exemples classiques cavec des formulaires :

L’utilisation de javascript est très fréquente avec les formulaires, car il est utile de vérifier les saisies de l’utilisateur AVANT l’envoi des données au serveur. Le javascript étant par définition exécuté sur le client (votre PC)
Il évite des aller-retours inutiles � chaque erreur de saisie.

<FORM NAME= « form2″ ACTION= » « …>
Entrer un nom <INPUT TYPE= »TEXT »…>
<INPUT TYPE= »SUBMIT » VALUE= »Envoi » onClick=test_valeurs()>

</FORM>
// ici l’action est vide
// mais c’est l’événement onclick appelle une vérification Javascript

// on peut aussi déclencher sur un evénement onSubmit de la balise <FORM>
// cela aura le même effet que précédemment
<FORM NAME= « form3″ ACTION= » mail.php » onSubmit= »test_valeurs()…>
Entrer un nom <INPUT TYPE= »TEXT »…>
<INPUT TYPE= »SUBMIT » VALUE= »Envoi »>

</FORM>

remarque : dans ce 2eme exemple il est probable que la fonction javascript test_valeurs() teste les entrées du formulaire et appelle ensuite un document pour effectuer l’action suivant le formulaire.
Dans certains cas le code javascript peut apparaitre simultanément dans plusieurs balises du formulaire, il sera alors executé dans l’ordre logique.

entités javascript

Une entité est un genre de symbole qui représente un caractère ou une chaine de caractères. Un exemple simple est l’entité ‘caractère espace’ que l’on note ‘& nbsp; ‘ ou l’entité caractère ‘inférieur’ ou ‘<‘ que l’on note ‘& lt;’.

Il est donc enfin possible de mettre du code Javascript dans n’importe quel attribut de balise, sous forme d’entité. Le code sera introduit par un ‘&’ et encadré par des accolades.

<BODY BGCOLOR= »&{couleur_du_theme();} » >

Types et Variables

Un langage de programmation qui n’utiliserait que des constantes et ne pourrait modifier aucune valeur serait d’une utilité assez limitée 😉

Une variable permet de stocker de l’information qui changera au fur et à mesure du déroulement du programme.
On peut visualiser, modifier ou donner une valeur à (assigner) une variable.
Comme les autres langages javascript permet de gérer de variables, et nous le verrons, assez facilement.
Une variable s’accède par son nom.
Un nom de variable est une chaîne quipeut contenir des caractères alphabétiques ou le caractère ‘_’, il est sensible à la casse : ‘ma_variable’ est différent de ‘Ma_Variable’

Déclarations et types de variables

La déclaration de variable n’est pas obligatoire en javascript. Qu’on l’a déclare ou pas le type est implicite, et sera connu dès qu’on initialise (affecte une première valeur) à la variable. On peut donc créer des variable etles initialiser de la façon suivante :

// déclaration seule
var x;
// déclaration explicite et affectation d’une valeur numérique
var y = 1;
// déclaration implicite et affectation d’une valeur à une variable numérique
z=2;
// déclaration implicite et affectation d’une valeur à une variable chaîne
t = « une chaine »;

Il existe en fait 5 types différents en Javascript

  • numérique

il n’y a pas de distinction explicite entre entier, réels, décimaux ou hexadécimaux. C’est la valeur qui définit la catégorie du nombre. Ainsi ‘x=1’ définit une variable entière, ‘y=3.5’ une valeur réelle, etc.

pi = 3.1415; c = 3e5; code_blanc = 0xFFFFFF;

  • booléen

variable logique vrai ou fausse. On pourra utiliser les mot réservés ‘true’ et ‘false’

resultat = true;

  • chaînes de caractères

une suite de caractère indifféremment entre simples cotes ou entre guillemets.
On peut imbriquer un style de délimiteur dans un autre.
On peut utiliser des caractères d’échappement spéciaux, grace au caractère ‘\’ :

\n : saut de ligne \t : tabulation \’ : une cote
\ » : un guillemet \\ : backslash
\nnn : caractère de code ‘Latin’ nnn unnnn : caractère de code ‘unicode’ nnn

prenom = « Martin »; couleur = ‘blanc’; nom = « De L’église »;
balise = ‘<img src= »icone.jpg » border= »0″>’
s = ‘un texte \n sur 2 lignes’

  • tableau

Un tableau est ensemble structuré de valeurs (éventuellement hétérogènes) repérées par un indice numérique.
Le premier élément d’un tableau a l’indice 0.
Pour accéder à un élément particulier on utilise l’opérateur ‘[]’ et le no d’indice visés.

t [0] = 1; t[1] = 2; t[2] = « zz »;
document.write (t[2] +  » Top »);
// un tableau littéral de valeurs
tab = [1,2, »zz »];

  • objets
    On peut créer des objets structuré, au sens classique du terme : un objet ayant des propriétés qui le caractérisent et des méthodes qui peuvent s’y appliquer.
    On utilise l’opérateur ‘new’ pour créer un objet.// un objet sans propriété particulière
    o = new Object();
    // des propriétés et des méthodes
    o.lg = 10;
    o.h = 22;
    o.surface = o.lg * o.h ;
    // une création qui utilise un constructeur pédéfini
    ce_jour = new date();

Opérateurs

Comme dans tous les langages, on trouve dans Javascript un certain nombre d’opérateurs qui, associés à des constantes ou à des variables, permettent de construire des expressions plus ou moins complexes.
Ils servent principalement à faire des calculs, à donner une valeur ou à construire des expressions logiques (vraies ou fausses ) dont l’on pourra se servir pour écrire des conditions.

Quelques exemples :

//expression arithmétique
x + 1 *(y-2)
// expression logique (‘||’ est le symbole du ‘ou’ logique)
(x > 2) || (y > 3)
// expression utilisant des chaînes de caractères
« bonjour  » + « Mr  » + nom

Ces opérateurs sont en quelque sorte typés, dans la mesure où ils dépendent des types des variables sur lesquelles ils opèrent (les opérandes). On veillera donc à ne pas mélanger les genres : des opérateurs de chaines de caractères avec des numériques par exemple.

Voici les principaux opérateurs de javascript, regroupés par catégorie.

Opérateurs Arithmetiques

opérateur Description Exemple
+ Addition  
Subtraction  
* Multiplication  
/ division 7/2 = 3.5
% Modulo
a%b renvoie le reste de la division entière de a par b
5%2 vaut 1
10%2 vaut 0
++ Increment si x=4, x++ vaut 5
Decrement si x=4, x– vaut 3

opérateurs d’assignation

operateur Exemple identique �
= x=y x=y
+= x+=y x=x+y
-= x-=y x=x-y
*= x*=y x=x*y
/= x/=y x=x/y
%= x%=y x=x%y

opérateurs de comparaison

operateur Description
== est égal �
=== vérifie l’égalité de valeur ET de type
si x=2 x==2 est vrai et x=== »2″ est faux
!= différent de
> supérieur strictement �
< inférieur strictement �
>= supérieur ou égal �
<= inférieur ou égal �

opérateurs logiques

Operateur Description Exemple
&& et logique x=6
y=3(x < 10 && y > 1) est vrai
|| ou logique x=6
y=3(x==5 || y==5) est faux
! négation logique x=6
y=3 !(x==y) est vrai

opérateurs de chaines

l’opérateur de concaténation est ‘+’
exemple : c1 = « bonjour »; c2 = »les gars »; c3 = c1+c2;

opérateur conditionnel ternaire

variablename=(condition)?value1:value2
exemple : greeting =(visitor=="PRES")?"Dear President ":"Dear "

Exemples d’entrées / sorties

Les entrées/sorties en javascript : saisie et affichage simple

Pour afficher du texte en javascript on peut utiliser la méthode ‘write’ de l’objet ‘document’ :

document.write(« mon texte »)
document.write(ma_variable_chaine)

Il est également possible d’utiliser une boite de dialogue, grace � la fonction ‘alert’. Cette fonction ouvre une petite fenêtre pop up avec du texte.

alert (« Vous devez saisir au moins un nom »)

ca donne ca

alerte

Pour saisir des entrées au clavier on utilisera soit la méthode ‘prompt’ de l’objet ‘window’

window.prompt (« texte d’invite », « texte affiché par défaut »)

ca donnera ca (sans texte par défaut)

prompt

ou on utilisera un simple champ de formulaire HTML (hors des balises <SCRIPT> donc..

<form name= »form1″>
Saisissez votre nom
<input type= »text » name= »nom »>
</form>

Voyons un exemple complet qui utilise les deux modes de saisie et les deux modes d’affichage sus évoqués.
On se servira de l’alerte en cas de saisie incorrecte

<html>
<head>
<title>entrees et sorties</title>
<script>
function salut () {
var message = « Bonjour cher(e)  »
var nom = document.forms[0].nom.value
// on n’a pas saisi de nom ?
if (nom.length == 0){
alert (« Il faut saisir au moins un nom! »);

}
// on a saisi alors on affiche le message personnalisé
else {
message += prenom +  »  » + nom
document.write(message)
}
}
</script>
</head>
<body>
<script>
// on peut faire une saisie en javascript…
var prenom = window.prompt(« Entrez votre prénom »)
</script>
<!- saisie du nom dans un champ texte de formulaire –>
<!- et appel du javascript qd on clique sur ‘envoi’ –>
<form name= »form1″ action= »# » onsubmit=salut()>
Saisissez votre nom
<input type= »text » name= »nom »>
<input type= »submit » value= »envoi »>
</form>
</body>
</html>

Conditions, boucles et tableaux

Nous allons aborder dans ce chapitre quelques instructions très utiles pour écrire des programmes en Javascript, que nous illustrerons par des exemples. Arrivé à ce stade vous pourrez commencer à écrire des traitements complexes, mais qui n’interagissent pas encore avec HTM et le navigateur.

Les conditionnelles en javascript

Ce type d’instruction permet d’effectuer certaines actions, certains traitements, suivant qu’une condition est réalisée ou non. On utilise un structure de type ‘si condition ok …alors action1…sinon action2’ soit en javascript :

  • Condition ‘if’

La condition à vérifier est une expression logique (évaluable à vraie ou fausse donc) entre parenthèse. L’action à executer sera en général une suite d’instructions entre accolades.

<script type= »text/javascript »>
if (civilite = « Mr »)
{
document.write(« <b>Bonjour Monsieur</b> »);
}
</script>

  • Alternative if / else

Si une alternative existe lorsque la condition n’est pas vérifiée (est fausse) on utilisera l’instruction ‘else’ suivie d’une autre action

<script type= »text/javascript »>
if (civilite = « Mr »)
{
document.write(« <b>Bonjour Monsieur</b> »)
}
else
{
document.write(« <b>Bonjour Madame</b> »)
}
</script>

  • Alternatives multiples : switch

Dans des cas un peu plus compliqués on peut avoir un nombre important d’alternative et ne vouloir qu’une seule action parmi soit exécutée. Dans ce cas on utilise l’instruction ‘switch’

Une seule condition pourra être varie, et un seul bloc d’instruction sera executé, suivant le schéma suivant :

switch(n)
{
cas 1:
execute le bloc 1
break
cas 2:
execute le bloc 2
break
// et dans tous les autres cas…
default:
execute le bloc 3
}

remarque : l’instruction ‘break’ sert à sortir de la séquence du traitement ligne à ligne et à éviter d’exécuter plus d’une action

exemple :

<script type= »text/javascript »>
var unedate=new Date()
cejour=unedate.getDay()
// un message différent suivant le no du jour renvoyé par getday()
switch (cejour)
{
case 6:
document.write(« Dieu merci c’est samedi ! »)
break
case 0:
document.write(« profitez de votre dimanche! »)
break
default:
document.write(« vivement le week-end hein? »)
}
</script>

Les boucles
Elles permettent comme leur nom l’indique de répéter un nombre déterminé ou non de fois un bloc d’instructions.

  • la boucle for

Avec la boucle ‘for’ on sait par définition à l’avance combien le code va être excuté de fois. On s’en servira souvent pour afficher un compteur, ou pour lire les cases d’un tableau.
<script type= »text/javascript »>
var i=0
for (i=0; i<=5; i++)
{
document.write(« no :  » + i)
document.write(« <br /> »)
}
</script>

note : l’indice de la boucle n’évolue pas forcément de 1 en 1, il pourrait augmenter de 3 en 3 (i = i+3 au lieu de i++ dans ce cas…) voire diminuer.

  • la boucle while

A la différence de la précédente on ne sait pas exactement quand la répétition va s’arrêter…mais il faudra quand même qu’elle sarrête si on ne veut pas faire une boucle infinie …et attendre longtemps le résultat !

La fin sera déterminée par une condition logique. Dès que la condition de répétition ne sera plus vraie, la boucle s’arrêtera.

La syntaxe est la suivante :

while (condition)
{
instructions
}

exemples :

while (civilite != ‘Mr’ && civilite != ‘Mme’)
{
saisir_civilite()
}
// on pourrait aussi s’en servir comme d’une boucle for…
// dans ce cas ne pas oublier l’increment DANS la boucle
while (i<=5
{
document.write(« no :  » + i)
document.write(« <br /> »)
i=i+1
}

Les tableaux

Les tableaux nous l’avons vu sont des variables structurées, avec un indice numérique, qui associé à l’opérateur ‘[]’ permet d’y lire ou d’y ranger des éléments.
Le traitement des tableaux nécessite généralement des boucles (comme la nature est bien faite !).

Voici un exemple simple de création et de lecture de tableau :

<script type= »text/javascript »>
var i
var passe_temps= new Array()
passe_temps[0] = « Tennis »
passe_temps[1] = « Planche à voile »
passe_temps[2] = « Snowboard »
for (i in passe_temps)
{
document.write(passe_temps[i] + « <br /> »)
}
</script>

note : on utilise ici une variante de la boucle for : ‘for…in’ qui va ‘automatiquement’ s’incrémenter le la première à la dernière case du tableau.

Objets javascripts

Javascript et la programmation objet

On l’a dit en introduction javascript est un langage orienté objet. Nous verrons quelques applications dans les exemples sophistiqués de code.
Cela étant, javascript offre un certain nombre d’objets prédéfinis et de méthodes et propriétés associés.

Les propriétés sont des caractéristiques de l’objet ayant une certaine valeur.
On accède aux propriétés d’un objet grace à l’opérateur ‘.’ précédé du nom de l’objet et suivi du nom de la propriété.

nom_objet.nom_propriété

Ainsi un objet ‘chaîne de caractères’ � une propriété fréquemment utilisée qui est sa longueur, notée ‘length’.

<script type= »text/javascript »>
var message= »Bonjour � tous »
document.write(message.length)
</script>

Parallèlement les méthodes sont des actions qui peuvent être effectuées sur l’objet auxquelles elles sont associées. La notation est la même que pour les propriétés avec ‘.’

nom_objet.nom_méthode

Il existe par exemple des méthodes pour l’objet chaîne de caractères pour le passer en majuscule, minuscule, gras, extraire une sous-chaîne, etc.

<script type= »text/javascript »>
var message= »BONJOUR aTous »
document.write(message.toLowerCase())
</script>

les objets (prédéfinis) du langage javascript

ces objets sont organisés hiérarchiquement de la façon suivante

objets du langage

On trouvera ci-après les propriétés et méthodes des principaux objets manipulables en javascript

Built-in Objects
Array length join
reverse
sort xx
 
Date none getDate
getDay
getHours
getMinutes
getMonth
getSeconds
getTime
getTimeZoneoffset
getYear
parse
prototype
setDate
setHours
setMinutes
setMonth
setSeconds
setTime
setYear
toGMTString
toLocaleString
UTC
 
String length
prototype
anchor
big
blink
bold
charAt
fixed
fontColor
fontSize
indexOf
italics
lastIndexOf
link
small
split
strike
sub
substring
sup
toLowerCase
toUpperCase
 

voici un exemple d’utilisation ou l’on affiche le jour de la seamine avec fonction ‘getday()’ de l’objet ‘date ‘

<script type= »text/javascript »>
var j=new Date()
var jours=new Array(7)
jours[0]= »dimanche »
jours[1]= »lundi »
jours[2]= »mardi »
jours[3]= »mercredi »
jours[4]= »jeudi »
jours[5]= »vendredi »
jours[6]= »samedi »
document.write(« Nous sommes un  » + jours[j.getDay()])
</script>

Pour plus d’information voir les extraits du manuel de référence W3schools ci après :

JavaScript String Object

JavaScript Date Object

JavaScript Array Object

JavaScript Boolean Object

JavaScript Math Object

JavaScript Number Object

Les objets du navigateur
ces objets sont organisés hiérarchiquement de la façon suivante

objets navigateur

On trouve dans le tableau suivant� les ppropriétés, méthodes et événemens associées aux principaux objets du navigateur

arbre des objets du navigateur
Objet Propriétés Methodes gestionnaire d’événement Example –>
Window defaultStatus
frames
opener
parent
scroll
self
status
top
window
alert
blur
close
confirm
focus
open
prompt
clearTimeout
setTimeout
aucun
Frame defaultStatus
frames
opener
parent
scroll
self
status
top
window
alert
blur
close
confirm
focus
open
prompt
clearTimeout
setTimeout
 
Location hash
host
hostname
href
pathname
por
protocol
search
reload
replace
 
History length
forward
go
back  
Navigator appCodeName
appName
appVersion
mimeTypes
plugins
userAgent
javaEnabled  
document alinkColor
anchors
applets
area
bgColor
cookie
fgColor
forms
images
lastModified
linkColor
links
location
referrer
title
vlinkColor
clear
close
open
write
writeln
aucun (les gestionnaires d’événement onLoad et onUnload appartiennent � l’objet Window)
image border
complete
height
hspace
lowsrc
name
src
vspace
width
none  
form action
elements
encoding
FileUpload
method
name
target
submit
reset
onSubmit
onReset
text defaultValue
name
type
value
focus
blur
select
onBlur
onCharge
onFocus
onSelect

on peut par exemple afficher quelques information concernant le document ouvert en utilisant les propriétés de l’objet document

<html>
<head> <title> mon document </title></head>
<body>
<a name=toto href »toto.htm »>un premier lien � cliquer</a><br />
<a name=tata href »tata.htm »>…et un deuxieme</a><br />
<br />
qq infos sur ce document:<br />
<script type= »text/javascript »>
document.write(« son titre :  » + document.title� + « <BR> »)
document.write(« son adresse :  » + document.URL� + « <BR> »)
document.write(« le texte du 1er lien :  » + document.anchors[0].innerHTML)
</script>
</body>
</html>

ce qui nous donne à l’écran

infos_doc.jpg

les fonctions et propriétés racines applicables � tous les objets

FF: Firefox, N: Netscape, IE: Internet Explorer

Fonction Description FF N IE
decodeURI() Decodes an encoded URI 1 4 5.5
decodeURIComponent() Decodes an encoded URI component 1 4 5.5
encodeURI() Encodes a string as a URI 1 4 5.5
encodeURIComponent() Encodes a string as a URI component 1 4 5.5
escape() Encodes a string 1 3
eval() Evaluates a string and executes it as if it was script code 1 2 3
isFinite() Checks if a value is a finite number 1 4 4
isNaN() Checks if a value is not a number 1 2 3
Number() Converts an object’s value to a number 1    
parseFloat() Parses a string and returns a floating point number 1 2 3
parseInt() Parses a string and returns an integer 1 2 3
String() Converts an object’s value to a string 1    
unescape() Decodes a string encoded by escape() 1 3

les propriétés racine

Propriété Description FF N IE
Infinity A numeric value that represents positive or negative infinity 1 4 4
NaN Indicates that a value is « Not a Number » 1 4 4
undefined Indicates that a variable has not been assigned a value 1 4 5.5


gestion d’événement

Nous avons dit en introduction que Javascript est un langage de programmation événementiel. C’est à dire qu’il ‘réagit’ ou se déclenche en conséquence d’une action de l’utilisateur, en général sur le clavier ou la souris.

Les événements déclencheurs sont les suivants :

  • click de souris
  • chargement ou fermeture de page web
  • survol d’une image ou d’une zone avec la souris
  • selection d’un champ de saisie de texte
  • envoi d’un formulaire HTM
  • appui sur une touche du clavier

En pratique, les événements seront gérés en javascript grace à des attributs particuliers des balises HTML.
On trouvera ci-après la liste des attributs, les événements correspondants et leur signification

Attribut événement correspondant FF N IE
onabort chargemnt d’une image interrompu 1 3 4
onblur élément devenu inactif 1 2 3
onchange saisie d’une nouvelle valeur dans un champ 1 2 3
onclick clic sur un objet 1 2 3
ondblclick double clic sur un objet 1 4 4
onerror erreur lors du chargement d’une page ou d’une image 1 3 4
onfocus un élement devient actif (on y place le curseur) 1 2 3
onkeydown touche appuyée 1 4 3
onkeypress touche enfoncée 1 4 3
onkeyup touche relevée 1 4 3
onload image ou page finie de charger 1 2 3
onmousedown bouton de souris appuyé 1 4 4
onmousemove souris déplacée 1 6 3
onmouseout souris sortie d’une zone 1 4 4
onmouseover souris qui survolle une zone 1 2 3
onmouseup bouton de souris relaché 1 4 4
onreset bouton de formulaire ‘reset’ cliqué 1 3 4
onresize fenêtre redimensionnée 1 4 4
onselect texte sélectionné 1 2 3
onsubmit bouton de formulaire ‘envoi’ cliqué 1 2 3
onunload sortie de la page 1 2 3

FF : supporté par Firefox
N : supporté par Netscape
FF : supporté par Internet Explorer

gérer des cookies

Qu’est ce qu’un cookie?
Un cookie est un fichier texte text, stocké dans un répertoire connu et accessible par le navigateur et qui permet de stocker des informations personnelles.
Ces cookies ont une certaine durée de vie : le temps de votre session pour par exemple se rappeler la langue utilisée (fr ou en) par votre navigateur, ou beaucoup plus longtemps (des mois, des années) pour que vous n’ayez pas � refournir des informations déj� fournies.
Ils peuvent servir à :
  • mémoriser votre mot de passe pour éviter de vous le redemander
  • se rappeler votre identité et d’autre informations commercialement utiles (le type de produit déj� cherchés, les thèmes qui vous intéresse, etc.)
  • faire des statistiques sur les internautes
  • se rappeler la date de votre dernière venue
  • et plein d’autres choses encore…

Un cookie a au minimum 2 caractéristique : son nom et sa valeur
et des caractéristiques optionnelles : sa date d’expiration, le domaine du serveur du document qui le contenait, le chemin d(accès au dit document.

Le plus petit cookie du monde

Un cookie est accessible en javascript, en lecture et en écriture avec la propriété… ‘cookie’ de l’objet…’document’ …tout simplement !

Fort de cela tentons donc d’écrire le plus petit cookie du monde (il fait une ligne) :

<html>
<script>
document.cookie = « nom_de_mon_cookie=valeur_de_mon_cookie »
</script>
</html>

remarque : il est possible avec un navigateur comme FireFox de vérifier � tout moment quels sont les cookies stockés sur notre poste. Il nous suffit d’aller voir dans le menu ‘outils / options/ vie privée’ et ‘afficher les cookies’ et l’on vérifie aisément l’efficacité du code précédent :

cookie liste

remarque : le nom de domaine de l’hote (du serveur) n’apparait pas ici car le document était sur le PC local de l’auteur et non pas sur un serveur web distant. On le vérifie aisément en constatant que le chemin de ce document est ‘C:\TEMP’

Afin de rendre ce code un peu plus universel nous allons écrire une fonction, qui prend en paramètre le nom, et la valeur du cookie, ainsi que sa durée de vie en jours. Ainsi ce code sera réutilisable quelle que soit l’application.

fonction générale de création d’un cookie

html>
<head>
<script>
function ecrit_cookie(nom,valeur,jours)
{
var expire_date=new Date()
expire_date.setDate(expire_date.getDate()+jours)
document.cookie=nom + « = » +escape(valeur)+
((jours==null) ? «  » : « ; expires= »+expire_date.toGMTString())
}
</script>
</head>
<body>
<script>
nom=prompt(‘entrez nom:’, » »)
valeur=prompt(‘entrez valeur:’, » »)
// on met une date d’expiration dans un an…
// et on ‘appelle’ la fonction pour l’executer (tout de même)
x = ecrit_cookie(nom,valeur,365)
</script>
</body>
</html>

cook_list2.jpg

on vérifie grace au navigateur, que le cookie a bien été suavegardé. La nom de la variable est ‘utilisateur’ et sa valeur ‘DD4. La date d’expiration est le 14 oct 2008 soit un an après la date de création du cookie par l’auteur…

lecture d’un cookie

comme dit précédemment il suffit d’utiliser la propriété ‘document.cookie’

<html>
<body>
Voici le cookie :
<script>
// on utilise ‘unescape’ pour décoder les caractèrs spéciaux éventuels
document.write(unescape(document.cookie))
</script>
</body>
</html>

Pour une description plus complètes et des exemples également voir la page sur les cookies du W3schools : http://w3schools.com/js/js_cookies.asp

et pour terminer dans la bonne humeur, si vous souhaitez apprendre comment gagner beaucoup d’argent avec des cookies ;-))
voir l’excellent ‘small time crooks’ de Woody Allen

gérer des fenêtres en javascript

Nous allons voir ici comment gérer des fenêtres avec l’objet ‘window’.
Cet objet est très important en javascripts, parce que d’une par sous…windows on passe son temps � manipuler des fenêtres (et sous linux qussi bien souvent), et surtout par ce que cet objet est le parent d’autre tout aussi importants :

  • l’objet document
  • l’objet location
  • l’objet history
  • l’objet frames ou cadres (de moins en moins utilisés)

window.open : ouvrir une fenêtre ‘pop up’

La syntaxe est la suivante :

open (URL, nom_fenetre [, attributs_fenetre_optionnels])

URL : est l’adresse du document � ouvrir dans la fenêtre. Il peut être vide…
nom_fenetre : le nom de la fenêtre, qui pourra être utilisé pour la référencer par la suite
attributs_fenetre_optionnels : une chaîne de caractères qui précise les différents attributs de la fenêtre (barre de statut, ascenceur, taille,…). Cette chaîne est optionnelle.

window.open (« http://dd.estsurinternet.com », »ma fenetre »);

Le tableau suivant donne un descriptif de tous les attributs (features) d’une fenêtre.

attribut description
directories = yes/no Affiche ou non les boutons de navigation
location = yes/no Affiche ou non la barre d’adresse
menubar = yes/no Affiche ou non la barre de menu (fichier, edition, …)
resizable = yes/no Définit si la taille de la fenêtre est modifiable ou non
scrollbars = yes/no Affiche ou non les ascenceurs (barres de défilement)
status = yes/no Affiche ou non la barre d’état
toolbar = yes/no Affiche ou non la barre d’outils
width = largeur Définit la largeur (en pixels)
height = hauteur Définit la hauteur (en pixels)

quelques exemples

window.open(« http://dd.estsurinternet.com », « dd »)

lors de ce premier appel, on ne précise aucun attribut pour la fen^tre ils prennent donc tous leur valeur par défaut (true). La conséquence est que la taille de la fenêtre est quelconque et que tous les attributs sont présents (ascenceur, poignée de redimensionnent, barre d’outil, etc.)

window.open(« http://dd.estsurinternet.com », « dd », « height=250,width=400 »)

Cela nous donne ceci :

window site DD

Dans ce deuxieme exemple� on précise une taille pour la fenêtre mais les autres attributs non précisés prennent la valeur ‘faux’ et ne sont donc pas présent…
Si la fenêtre est trop petite , comme c’est le cas ici, on ne pourra même pas faire défiler son contenu !

Quelques infos supplémentaires

note : les arguments de window.open étant des chaines de caractères, s’ils sont inclus dans des guillemets (par exemple onclick = « window.open(…) » il faudra alors mettre des simples cotes autour de chaque paramètres, pour respecter les règles concernant l’inclusion des simple et double quotes en javascript

pour fermer une fenêtre : window.close()
ceci ferme la fenêtre courante. Pour fermer une fenêtre particulière utilisez son nom explicitement window.nom_fen.close() ou nom_fen.close()

pour mettre une fenêtre en avant-plan : window.focus()
ceci est très utile car lorsque l’on a déj� ouvert une fenêtre et que celle-ci est en arrière-plan, on a l’impression que rien ne se passe! Attention c’est la fene

pour positionner une fenêtre � l’écran : windows.moveto (position absolue)� ou moveby (déplacement relatif)

Pour plus d’infos, voir la description complète de l’objet� window par w3schools :
http://w3schools.com/htmldom/dom_obj_window.asp

exercice javascript – objets DOM

1) accéder aux objets d’un document en Javascript

Le formulaire form1.htm contient un certain nombre d’objets de formulaire.
Récupérez le source HTML de form1 dans un éditeur de texte et sauvegardez le en form2.htm.
Modifez ce fichier, en y ajoutant un bloc Javascript à la fin du corps du document (body), après la fin du formulaire.

Le programme javascript à inclure devra afficher quelques objets du formulaire :
« prénom : » + la valeur du champ prénom
« nom : » + la valeur du champ nom
« mois de naissance:  » + le no du mois de naissance

On utilisera pour ce faire :
‘document.write’ pour afficher le texte et les valeurs
et pour chaque élément du formulaire, le nom complet de l’objet suivi de la propriété ‘.value’ qui donnera sa valeur (par exemple nom_formulaire.nom_element.value)

Dans un deuxieme temps on essaiera d’afficher en plus, la valeur du bouton radio ‘civilité’. Comme il y a 3 variables qui s’appellent ‘civilite’, on n’utilisera pas le nom de l’élément mais le tableau de radio bouton civilite[] . Il faudra donc tester la propriété ‘checked’, pour chaque case du tableau. Si elle est vraie c’est que le radio bouton a été sélectionn, et on pourra alors afficher sa valeur.
2) ouvrir une fenêtre en Javascript

Lors de notre exercice sur les formulaires, on a remarqué que ‘fiche.htm’ est appelée dès que l’on clique sur le bouton ‘envoi’ et se substitue au formulaire. Que faire si on veut ouvrir une fenêtre séparée ? ET bien on utilisera un peu de javascript…

Modifiez le code du formulaire ‘form1.htm’ (appelez-le ‘form2.htm’) pour que le clic sur le bouton ‘envoi’ ouvre une fenêtre séparée appelée ‘ma fiche’, qui contienne ‘fiche.htm’.
Pour ce faire on utilisera la méthode ‘window.open’, avce les paramètres qui vont bien, et on utilisera un attribut ‘onsubmit’ ou ‘onclick’ pour déclencher l’ouverture.
Dans un premier temps on mettra le code javascript directement derrière cet attribut, puis ensuite on en fera une fonction ‘ouvrir_fenetre’ déclarée dans l’entête, et qui accepte 3 paramètre de type chaîne : le nom, l’adresse et les caractéristiques de la fenetre. L’appel se faisant ainsi :

ouvrir_fenetre ( « ma fiche », » /fiche.htm », « la liste des attributs de la fenetre »)

On veut une fenetre de 300×300 pixels, avec un ascenceur.

Corrigés javascript – objets DOM

1) accéder aux objets d’un documents

On placera le bloc Javascript, après la balise ‘</FORM>’ de fin du formulaire.
Ce code permet d’afficher des éléments simples en utilisant le nom du formulaire ‘form1’ et le nom de chaque élément désiré du formulaire.
La boucle ‘for’ permet d’afficher seulement le radio bouton qui a été sélectionné… parmi les 3 du document

<script>
document.write(« prenom: »+document.form1.prenom.value)
document.write(« <BR> »)
document.write(« nom:  » + document.form1.nom.value)
document.write(« <BR> »)
document.write(« mois_de_naissance: »+ document.form1.mois.value)
document.write(« <BR> »)

// puis pour le bouton radio ‘civilité’
// on récupère le nombre de radio boutons
// (il pourrait y en avoir + que 3)
nb_bouton_radio = document.form1.civilite.length
for ( i=0; i < nb_bouton_radio; i++)
{
// la propriété ‘checked’ est vraie
// si le bouton était sélectionné
if (document.form1.civilite[i].checked)
{
valeur_bouton = document.form1.civilite[i].value
}
}
document.write(« Civilité:  » + valeur_bouton)
</script>

exercice javascript – boucles et tableaux

Ecrire un code javascript, qui déclare un tableau ‘semaine’.
Initialisez le avec les jours de ‘lundi’ à ‘dimanche’.
A l’aide de la fonction getday() récupérez le no du jour d’aujoud’hui dans une variable.
Puis affichez le texte « tiens on est déjà… » suivi du nom du jour de la semaine.

corrigé javascript – boucles et tableaux

Voici donc le corrigé de l’exercice sur boucles et tableaux.
On prendra soin de respecter la casse et l’orthographe des noms de fonctions et constructeurs de javascript, pour ne pas avoir de surprises…

<html>
<head>
<title> corrige javascript 3 </title>
</head>
<body>
<script type= »text/javascript »>

semaine = new Array(7)
semaine[1]= »Lundi »
semaine[2]= »Mardi »
semaine[3]= »Mercredi »
semaine[4]= »Jeudi »
semaine[5]= »Vendredi »
semaine[6]= »Samedi »
semaine[0]= »Dimanche »

d=new Date()
no_jour = d.getDay()

document.write(« Tiens on est déjà  » + semaine[no_jour])
</script>
</body>
</html>

exercice javascript – boutons et changement d’adresse

Le but de cet exercice est de faire une page HTML avec un texte ‘Vous allez ou ?’ et 3 boutons marqués respectivement ‘le site du W3C’ , ‘le site de W3schools’ et ‘le site de Microsoft’.
Lorsque l’utilisateur cliquera sur l’un des boutons il sera envoyé vers le site correspondant.

Pour vous aider :

Dans l’entête :
On définira une fonction ‘aller_au_site()’ qui prendra comme paramètre un numéro de site, et enverra l’utilisateur ou il faut grace � la la propriété ‘window.location’.
On utilisera un tableau : ‘site[]’ contenant des adresses complètes de sites, avec en 1ere case l’adresse http du site W3C, en 2eme celle de W3schools, en 3eme celle de microsoft.

Dans le corps du document :
Associé aux boutons on ajoutera un événement ‘onclick’ pour que lorsque l’utilisateur clique sur le bouton 1, on appelle la fonction aller_au_site() en lui passant le paramètre 1, idem pour les boutons 2 et 3.

corrigé javascript – boutons et changement d’adresse

Voici le code source de la page solution

<html>
<head>
<meta http-equiv= »Content-Type » content= »text/html; charset=utf-8″>
<title>boutons et Javascript</title>

<script language= »JavaScript » type= »text/JavaScript »>
function aller_au_site (num)
{
// rappel : la 1er case du tableau porte le no ‘0’
sites = [‘http://www.w3c.org’, ‘http://www.w3schools.com’, ‘http://www.microsoft.com’];
// on utilise la methode href de ‘location’
// qui permet de changer l’adresse du navigateur
window.location.href = sites[num];
}
</script>

</head>

<body>
<table border= »0″ celppading= »0″ cellspacing= »0″>
<tr>
<th align= »center »>Vous allez ou ?</th>
</tr>
<tr>
<td align= »center »>
<input type= »button » name= »bouton0″ value= »site du W3C » onclick= »aller_au_site(0) »>
</td>
</tr>
<tr>
<td align= »center »>
<input type= »button » name= »bouton1″ value= »Site de W3 schools » onclick= »aller_au_site(1) »>
</td>
</tr>
<tr>
<td align= »center »>
<input type= »button » name= »bouton2″ value= »Site Microsoft » onclick= »aller_au_site(2) »>
</td>
</tr>

</table>
</body>
</html>