Professional Documents
Culture Documents
Nicolas Bauwens
Conseiller pdagogique - Formateur
n.bauwens@bruxellesformation.be
1
Contenu
Introduction ............................................................................................................................................ 5
Le B-A-BA d'Internet ........................................................................................................................... 5
Qu'est-ce que JavaScript & jQuery ? ................................................................................................... 6
Dfinition ........................................................................................................................................ 6
Historique........................................................................................................................................ 6
Outils ............................................................................................................................................... 6
Quelques mots sur jQuery .............................................................................................................. 7
Inclure du JavaScript dans une page HTML ............................................................................................ 7
Les lments du langage ......................................................................................................................... 8
Variables ............................................................................................................................................. 8
Numrique (Number) ...................................................................................................................... 9
Chane de caractre (String) ........................................................................................................... 9
Boolens (Boolean) ....................................................................................................................... 10
null et undefined ........................................................................................................................... 10
Tests et conditions ............................................................................................................................ 12
Les oprateurs de comparaison .................................................................................................... 12
Les oprateurs logiques ................................................................................................................ 13
Types de tests ............................................................................................................................... 14
Tester null et undefined ................................................................................................................ 15
Les boucles ........................................................................................................................................ 17
Lincrmentation ........................................................................................................................... 19
Le type array ................................................................................................................................. 19
Types de boucles ........................................................................................................................... 20
Les fonctions ..................................................................................................................................... 22
Dclaration .................................................................................................................................... 22
Appel ............................................................................................................................................. 22
Porte des variables ...................................................................................................................... 23
Les fonctions anonymes................................................................................................................ 23
Les avantages de jQuery ....................................................................................................................... 25
Inclure jQuery dans son projet ............................................................................................................. 25
En local .......................................................................................................................................... 25
Via CDN ......................................................................................................................................... 25
Le DOM ................................................................................................................................................. 26
2
Comprendre le Document Objet Model ........................................................................................... 26
Introduction aux objets ................................................................................................................. 28
Les objets window et document ................................................................................................... 29
Lecture et modification du DOM ...................................................................................................... 30
En JavaScript pur ........................................................................................................................... 30
En jQuery....................................................................................................................................... 32
Les vnements .................................................................................................................................... 40
Le concept dvnement .................................................................................................................. 40
Associer un vnement un lment .............................................................................................. 41
En JavaScript ................................................................................................................................. 41
Avec jQuery ................................................................................................................................... 42
Attendre le chargement de lHTML .................................................................................................. 43
Lobjet Event ..................................................................................................................................... 44
Stopper le comportement normal dun vnement ........................................................................ 44
Plus loin avec jQuery ............................................................................................................................. 45
Les objets littraux ............................................................................................................................ 45
Dclarer et utiliser un objet littral .............................................................................................. 45
Autre utilisation dun objet littral : le tableau associatif ............................................................ 46
La boucle for in .............................................................................................................................. 47
Les effets visuels ............................................................................................................................... 47
Apparatre et disparatre............................................................................................................... 47
Les animations .............................................................................................................................. 48
Les slecteurs avancs ...................................................................................................................... 49
Les filtres ........................................................................................................................................... 50
Parcourir le DOM .............................................................................................................................. 51
Les mthodes utilitaires .................................................................................................................... 52
Les plug-ins............................................................................................................................................ 52
jQuery UI ........................................................................................................................................... 52
Autres plug-ins .................................................................................................................................. 52
Les formulaires et la validation ............................................................................................................. 53
Interagir avec un formulaire ............................................................................................................. 53
Slectionner des lments ............................................................................................................ 53
Lire et modifier les valeurs ............................................................................................................ 54
Les vnements ............................................................................................................................ 55
3
Activer/dsactiver des champs ..................................................................................................... 56
Valider un formulaire ........................................................................................................................ 57
Introduction .................................................................................................................................. 57
Configurer la validation ................................................................................................................. 57
Styler les messages derreur ......................................................................................................... 59
Requtes AJAX avec jQuery .................................................................................................................. 59
Introduction ...................................................................................................................................... 59
Fonctionnement................................................................................................................................ 60
Mthodes jQuery .............................................................................................................................. 60
.load() ............................................................................................................................................ 60
$.get() et $.post() .......................................................................................................................... 61
$.getJSON() ................................................................................................................................... 61
$.ajax() .......................................................................................................................................... 61
Les cookies ............................................................................................................................................ 62
Lobjet Date....................................................................................................................................... 63
Le debug et la gestion des erreurs ........................................................................................................ 64
Le debug ............................................................................................................................................ 64
La gestion des erreurs ....................................................................................................................... 65
La minification ....................................................................................................................................... 65
Plus dinformations ............................................................................................................................... 66
Sources .................................................................................................................................................. 66
4
Introduction
Le JavaScript cest le 3me pilier du web design. Le premier cest lHTML, il dcrit la structure dune
page web. Le second, cest la CSS, qui dfinit la prsentation de la page. Le JavaScript lui dfinit le
comportement de la page : il met vie une page web qui serait autrement compltement statique.
Le B-A-BA d'Internet
Petit rappel pour ceux qui savent, et petite explication pour ceux qui se sont toujours pos la
question mais comment a marche Internet ?
Pour faire simple, quand vous tapez http://www.google.com dans votre navigateur, votre requte
est envoye vers un serveur web, dans ce cas-ci un serveur de chez Google, qui va simplement vous
renvoyer un fichier HTML accompagn de fichiers CSS et ventuellement de JavaScript. Ce transfert
de donnes utilise le protocole HTTP (HyperText Transmission Protocol). Un protocole est une
spcification des rgles de communication entre matriels lectroniques.
Une fois la page web reue par le navigateur, celui-ci va dcoder tout a (parsing en anglais) et vous
afficher une belle page web !
5
Qu'est-ce que JavaScript & jQuery ?
Dfinition
JavaScript est un langage de programmation interprt.
Un langage de programmation, c'est un langage qui permet d'crire du code source. Le code source
quant lui:
communique des actions un ordinateur sous forme d'instructions (variables, tests, boucles,
etc...)
peut tre compil: le code est d'abord converti en langage binaire (0 et 1) par un
compilateur afin d'tre compris par l'ordinateur
ou interprt: l'ordinateur comprend directement le code via un interprteur. On parle
souvent du mot script pour parler de code interprt. Dans le cas du JavaScript,
l'interprteur est inclus dans le navigateur web (SpiderMonkey pour Firefox, JScript pour IE,
V8 pour Chrome)
C'est un langage client: il est interprt par le navigateur, donc sur la machine de l'internaute.
L'inverse des langages clients sont les langages serveur: ils s'excutent sur le serveur et renvoient de
l'HTML aux machines clientes. PHP, C#, Java, sont des langages serveur.
Comme il s'excute sur la machine client, cela peut poser divers problmes: lenteur de l'excution
du script due aux performances de la machine client, problme de compatibilit avec des
navigateurs obsoltes voir la dsactivation complte de JavaScript sur la machine cliente. Nous
reviendrons sur ces problmatiques dans le cours.
Historique
Il ne faut pas retenir tout a mais a va claircir certains termes que vous risquez de rencontrer
quand vous travaillerez avec du JavaScript. JavaScript a t invent par Netscape en 1995 et fut
ensuite standardis par l'ECMA (un organisme qui met en place des standards dans le monde de
l'informatique). La version standardise s'appelle donc ECMAScript, la version stable la plus rcente
tant ECMAScript 5. Plusieurs implmentations d'ECMAScript existent l'heure actuelle, dont JScript
(implmentation dans IE) ou ActionScript (dans Flash).
D'o quelques diffrences de comportement entre Mozilla et Internet Explorer, JScript permettant
de faire des choses qui ne sont pas possible par dfaut avec JavaScript.
Outils
Pour crire du JavaScript, il ne faut pas d'outils particuliers. Votre diteur HTML fait l'affaire, aussi
bien qu'un outil comme Notepad++. Afin de nous faciliter la vie, nous utiliserons l'outil WebStorm
qui fait de l'autocompletion et offre des petites fonctionnalits sympathiques comme le debug de
code.
Vous pouvez aussi utiliser le site http://jsfiddle.net/ qui permet de tester rapidement du code
JavaScript sans devoir ouvrir un diteur, crer un fichier, le lancer dans Firefox etc... Cest trs
6
pratique quand vous voulez tester du code rapidement ! Les exemples de ce cours seront dans
jsfiddle.
Enfin, outil combien indispensable pour dbugger du JavaScript : Firebug. FireBug est une
extension de Firefox et permet dinspecter le code HTML et les CSS mais aussi de dbugger du
JavaScript, voir les requtes AJAX, etc Vous pouvez utiliser la mthode console.log() dans votre
code pour dbugger, mais attention, retirez cette instruction avant de mettre le site en ligne !
De plus, jQuery soccupe tout seul de la compatibilit avec les diffrents navigateurs, mme IE 6
pour information Internet Explorer 6 et mme 7 sont les pires cauchemars dun intgrateur car ils
regorgent de spcificits propres eux.
Sa syntaxe est claire et facilement comprhensible, le seul point ngatif tant quil impacte les
performances techniques car la librairie est assez lourde charger.
C'est trs chouette, mais pour jouer avec jQuery il faut quand mme comprendre les bases du
JavaScript, et plus prcisment sa syntaxe. Comme si vous appreniez une nouvelle langue, nous
allons voir les rudiments de grammaire et de vocabulaire du langage dans les prochains chapitres.
<script type="text/javascript">
[CODE JAVASCRIPT]
</script>
se trouver dans un fichier externe (extension .js), sous cette forme (la localisation du fichier
peut tre absolue ou relative, ici il se trouve dans le fichier function.js)
Prenez l'habitude de mettre vos scripts dans des fichiers spars, par soucis de performances (le
fichier sera mis en cache par le navigateur) et pour rendre le script inobstrusive (nous reviendrons
sur cette notion la fin du cours)
Il est souvent mentionn que le tag <script> doit se trouver dans le tag <head>, cependant une page
Web est lue par le navigateur de faon linaire, c'est--dire qu'il lit d'abord le <head>, puis les
lments de <body> les uns la suite des autres. Si vous appelez un fichier JavaScript ds le dbut
7
du chargement de la page, le navigateur va donc charger ce fichier, et si ce dernier est volumineux,
le chargement de la page s'en trouvera ralenti. C'est normal puisque le navigateur va charger le
fichier avant de commencer afficher le contenu de la page.
Pour pallier ce problme, il est conseill de placer les tags <script> juste avant la fermeture du tag
<body>.
Variables
Vous vous souvenez de votre cours de math ? On y parlait dj de variables, par exemple dans le
calcul suivant, on trouve 3 variables: x, a et b.
x = (a + b)/4
C'est le mme principe en informatique, une variable permet de stocker une valeur, une
information, qu'elle soit numrique, sous forme de texte, ou autre.
Afin d'utiliser une variable il faut d'abord la dclarer. Il s'agit tout simplement de lui rserver un
espace de stockage en mmoire, rien de plus. Une fois la variable dclare, vous pouvez commencer
y stocker des donnes sans problme.
var myVariable;
Notez la prsence dun point-virgule. Aprs chaque instruction, il faut mettre un point-virgule. Cest
comme a
le JavaScript est sensible la casse ou case-sensitive, ce qui veut dire que les majuscules
et minuscules comptent.
var myVariable;
var MyVariable;
On peut nommer une variable comme on le souhaite, cependant il existe certains noms rservs
qu'on ne peut pas utiliser, sinon le code ne marchera pas. La liste complte des mots rservs
Une fois une variable dclare on peut l'initialiser, c'est--dire lui assigner une valeur, par exemple
8
var myVariable;
myVariable = 2;
Contrairement de nombreux langages, le JavaScript est un langage typ dynamiquement. Cela veut
dire, gnralement, que toute dclaration de variable se fait avec le mot-cl var sans distinction du
contenu, tandis que dans d'autres langages, comme le Java, il est ncessaire de prciser quel type de
contenu la variable va devoir contenir (un nombre, du texte, etc...)
Cela veut aussi dire que l'on peut y mettre du texte en premier lieu puis l'effacer et y mettre un
nombre quel qu'il soit, et ce, sans contraintes. Il faut donc tre trs attentif !
Numrique (Number)
Ce type reprsente tout nombre, qu'il soit entier, ngatif, dcimal,
Pour assigner un type numrique une variable, il vous suffit juste d'crire le nombre seul :
var number = 5;
Attention, dans le cas d'un nombre dcimal, il faut utiliser le . et non la virgule, par exemple:
Quelle est l'utilit ? De pouvoir faire des calculs par exemple ! Et cette fin, vous pouvez utiliser les
oprateurs arithmtiques que vous connaissez tous comme +, -, /, *.
Mais galement, moins connu, l'oprateur %, qui permet de calculer le modulo (le reste de la
division entire). A quoi sert le modulo ? A vrifier si un nombre est pair par exemple, ou multiple
d'un chiffre.
9
Il est important de prciser que si vous crivez var myVariable = '2'; alors le type de cette
variable est une chane de caractres et non pas un type numrique.
Une autre prcision importante, si vous utilisez les apostrophes pour encadrer votre texte et que
vous souhaitez utiliser des apostrophes dans ce mme texte, il vous faudra alors chapper vos
apostrophes de cette faon :
Pourquoi ? Car si vous n'chappez pas votre apostrophe, le JavaScript croira que votre texte s'arrte
l'apostrophe contenue dans le mot c'est . Du coup, une erreur sera gnre et la suite de votre
script ne s'excutera pas.
noter que ce problme est identique pour les guillemets. Une autre possibilit est d'encadrer le
texte avec des guillemets quand vous utilisez des apostrophes dedans:
Boolens (Boolean)
Ce type permet simplement de stocker "vrai" ou "faux" :
Sachez qu'il est galement possible de "convertir" une variable d'un type l'autre, par exemple de
transformer une string qui contient "42" en une variable numrique qui contient le nombre 42 et
inversement.
null et undefined
Il arrive quon doive dire quune variable est dclare mais ne contient rien. Dans ce cas, on utilisera
null.
Si une variable n'a pas t initialise, elle sera undefined. Evidemment, si vous excuter une action
avec une variable undefined, le code va planter.
10
Exemples de undefined et de null.
Ce test appelle console.log(), pensez ) activer Firebug ;-)
http://jsfiddle.net/xa4zs/
11
Tests et conditions
Les tests permettent d'excuter une action (ou de ne pas l'excuter !) en fonction de certains
critres, ou conditions. Les tests s'appliquent toujours au type boolen, c'est--dire "vrai" ou
"faux". Un test est toujours du type "Si la condition est vraie, alors j'excute ceci, sinon j'excute
cela"
Par exemple, "si l'utilisateur est belge, alors afficher un message l'cran" ou "si l'utilisateur choisit
le thme 'vert' alors charger la CSS 'vert.css'" ou encore "si la rsolution de l'cran est minimum de
640*480, alors charger les scripts lightbox"
Exemples :
http://jsfiddle.net/9hNp4/
De quoi sont constitues les conditions ? De valeurs tester et de deux types d'oprateurs : de
logique et de comparaison. Pour tre plus clair: une condition sera vraie ou fausse en fonction du
rsultat d'une comparaison et/ou d'un test logique.
Oprateur Signification
== gal
!= diffrent de
=== contenu et type gal
!== contenu ou type diffrent de
> suprieur
>= suprieur ou gal
< infrieur
<= infrieur ou gal
12
Le rsultat d'une comparaison renvoie vrai ou faux, en bref, une valeur de type boolen ;-)
Exemple:
Lorsque qu'on teste plusieurs valeurs, il faut avoir en tte les rsultats possibles, voici la table de
vrit des oprateurs "ET" et "OU". Les rsultats d'un test logique est aussi un boolen
Loprateur ! quant lui renvoie linverse dune valeur boolenne. Si une variable est vraie , son
inverse sera faux .
Du coup, il est possible de combiner au sein d'un mme test, des oprateurs de comparaison et des
oprateurs logiques, comme dans l'exemple ci-dessous
13
Types de tests
if-else
Nous l'avons dj vue dans les exemples prcdents, retenez-le bien car c'est le type de test le plus
rencontr. Il permet d'excuter une action si une condition est vraie, et une autre action si elle est
fausse.
if (test) {
action;
}
else {
autreAction;
}
Il est possible d'enchaner les tests if-else, par exemple pour dire, "si le visiteur est Belge, alors
afficher un message vert, sinon si le visiteur est Franais, alors afficher un message bleu, sinon
afficher un message jaune"
if(test) {
action;
}
else if (test2) {
autreAction;
}
else {
actionParDfaut;
}
switch
C'est une variante du if-else. Si on doit tester plusieurs pays avec des if-else, a risque de vite devenir
ennuyeux. Dans le cas o il faut faire beaucoup de tests sur une mme donne (ici, le code pays du
visiteur), alors il est prfrable d'utiliser un switch car il permet de mieux s'y retrouver. Cette
instruction effectue une comparaison par rapport la valeur et au type.
Sa syntaxe :
switch(variable) {
case valeurPossible1 :
action1;
break ;
case valeurPossible2 :
action2;
14
break ;
case valeurPossible3 :
action3;
break ;
default :
actionParDfaut;
break ;
}
Linstruction break permet de casser le switch et den sortir ds que laction adquate a t
excute. Si on ne mentionne pas le break, les autres cas vont galement sexcuter !
default permet lui de dfinir une action par dfaut si aucune des valeurs des case ne correspond.
http://jsfiddle.net/zrUtK
ternaire
Une autre variante du if-else. Si vous voulez pargner vos doigts lors de l'criture de if-else, vous
pouvez passer par une condition ternaire. C'est la mme chose en plus court, mais en parfois moins
lisible... Prfrez le if-else, mais sachez reconnatre celui-ci.
Syntaxe:
ou
rsultat = (test) ? valeur si test est vrai : valeur si test est faux
http://jsfiddle.net/Xns2Z/
15
var notInit;
if(notInit == undefined)
{
alert("variable pas initialise")
}
Du coup, pour tester null et undefined mais aussi par exemple une string vide, il faudrait combiner
plusieurs conditions. Il existe une notation beaucoup plus concise !
Vous savez que les variables peuvent tre de plusieurs types : les nombres, les chanes de caractres,
etc. En fait le type d'une variable (quel qu'il soit) peut tre converti en boolen mme si la base on
possde un nombre ou une chane de caractres.
Quels contenus seront faux ? Un nombre qui vaut zro, une string vide, null ou undefined. Tous
les autres cas seront vrais . Du coup, on peut crire quelque chose comme a, qui est nettement
plus rapide :
Une autre petite subtilit du JavaScript nous est offerte par loprateur OU. Celui-ci, en plus de sa
fonction principale, permet de renvoyer la premire variable possdant une valeur value true.
alert(conditionTest1 || conditionTest2);
//affichera 'Une chane de caractres'
Si vous tes dj curieux, voici un petit exemple : on souhaite rcuprer le contenu texte dun DIV
grce au DOM (nous verrons ceci en dtail dans le chapitre ad hoc). Avec IE on doit utiliser
innerText et pour les autres navigateurs avec le standard ECMA, textContent . Une manire
concise de lcrire serait :
16
var txt = div.textContent || div.innerText || '';
http://jsfiddle.net/ZZbh5
Les boucles
Quand on parle de rpter un album en boucle, a vous voque quoi ? Le fait de rpter plusieurs
fois, automatiquement, les chansons de lalbum. Cest le mme principe en programmation. Les
boucles permettent de rpter une action plusieurs fois tant quune condition est respecte, ou
jusqu ce quune condition soit respecte.
Et oui, nous allons, comme pour les tests, utiliser les conditions dans les boucles. Il faut, bien
entendu, quun moment la condition devienne fausse, sinon on gnre une boucle infinie vous
vous rappelez des sites qui ouvraient milles fentres popup ? Cest un beau cas dutilisation dune
boucle infinie, une boucle qui ne sarrte jamais ! Haaaaaaaa !
Une boucle peut tre exprime de cette faon Tant que la condition est vraie, excuter ces
actions ou bien de cette faon Pour toutes les donnes que voici, excuter ces actions .
17
Une boucle fonctionne de cette manire :
1. On aura gnralement besoin dune variable de boucle, quon va initialiser avant la boucle
avec une valeur qui ne va pas rencontrer la condition de la boucle (sinon la boucle ne
senclencherait pas !).
2. A chaque passage de boucle ou itration, on vrifie si la condition est toujours vraie, si cest
le cas on va rentrer dans la boucle, cest--dire excuter les actions dans la boucle.
Si la condition est fausse, on sort de la boucle et on continue excuter le code suivant.
3. On doit, au sein de la boucle, la fin de toutes les actions, mettre jour la variable de boucle
pour que, un moment, sa valeur ne corresponde plus la condition et que la boucle
sarrte.
4. On retourne au point 2
Initialisation
fausse
Condition
vraie
Actions
Mise jour
18
Lincrmentation
Avant de plonger dans les types de boucles, arrtons-nous un instant car cest lendroit idal pour
parler de lincrmentation. Quest-ce que lincrmentation ? Cest le fait dajouter une unit un
nombre au moyen d'une syntaxe courte. l'inverse, la dcrmentation permet de soustraire une
unit.
Par exemple, pour incrmenter une variable numrique on peut le faire de cette manire
var incrementVariable = 0;
incrementVariable = incrementVariable + 1;
Mais on peut lcrire de manire plus courte avec loprateur ++ (ou -- pour une dcrmentation)
var incrementVariable = 0;
incrementVariable++;
Vous allez comprendre lintrt de lincrmentation dans les exemples des boucles qui utilisent des
Array.
Le type array
Bon, les boucles utilisent trs rgulirement un autre type de donnes quon appelle array, ou
tableaux en Franais. Pour ne pas confondre avec les tables HTML, on va garder le terme array!
L o les variables de type numrique ou string ne contiennent quune seule valeur, un array en
anglais, est une variable qui contient plusieurs valeurs, appeles items. Chaque item est accessible
au moyen d'un indice (index en anglais) et dont la numrotation commence partir de 0. Voici un
schma reprsentant un tableau, qui stocke cinq items :
Index 0 1 2 3 4
Item HTML 5 CSS 3 Photoshop JavaScript jQuery
Un array contenant 5 lment aura donc un index maximal de 4, cest--dire nombre dlments
1 .
Et pour rcuprer et modifier des valeurs, il faut prciser le numro de lindex en crochets :
19
skills[1] = PHP; //Modifier
console.log(skills[1]); //Accder
Types de boucles
while
Cest celle qui colle le plus au flux dcrit ci-dessus. Voici sa syntaxe :
while (condition) {
action1;
action2;
}
Exemple :
Tant quon natteint pas un div dfini dune collection de div, on rajoute du code HTML
aux div parcourus
http://jsfiddle.net/g8XJx/
Une existe une variante de la boucle while, la boucle do while. Elle ressemble trs fortement la
boucle while, sauf que dans ce cas la boucle est toujours excute au moins une fois. Dans le cas
d'une boucle while, si la condition n'est pas valide, la boucle n'est pas excute. Avec do while, la
boucle est excute une premire fois, puis la condition est teste pour savoir si la boucle doit
continuer.
Cependant vous allez rarement lutiliser, mais il faut savoir la reconnatre. Sa syntaxe :
do {
action;
} while (condition);
for
La boucle que vous allez utiliser le plus souvent est la boucle for. Elle fonctionne de la mme
manire quun while mais linitialisation, la condition et lincrmentation se dclarent sur une seule
ligne, comme ceci :
20
3. Enfin, dans le bloc d'incrmentation, on indique que la variable sera incrmente chaque
passage de la boucle, afin de la faire arriver la valeur darrt
Voici un exemple qui ne sert rien mais qui aide comprendre comment a scrit
Priorit d'excution
Les trois blocs qui constituent la boucle for ne sont pas excuts en mme temps :
Initialisation : juste avant que la boucle ne dmarre. C'est comme si les instructions
d'initialisation avaient t crites juste avant la boucle
Condition : avant chaque passage de boucle
Incrmentation : aprs chaque passage de boucle. Cela veut dire que, si vous faites un break
dans une boucle for, le passage dans la boucle lors du break ne sera pas comptabilis.
Un break permet de casser lexcution dune boucle et donc den sortir directement.
Linstruction continue, quant elle permet de mettre fin une itration, mais attention, elle ne
provoque pas la fin de la boucle : l'itration en cours est stoppe, et la boucle passe l'itration
suivante. Mais vous lutiliserez rarement !
Le fonctionnement mme du JavaScript fait que la boucle for est ncessaire dans la majorit des cas
comme la manipulation des array. Nous verrons aussi un peu plus tard une variante de la boucle for,
appele for in.
Exemples :
http://jsfiddle.net/WZ6ac/
http://jsfiddle.net/EvBmX/
21
Les fonctions
Que feriez-vous si vous devez excuter plusieurs fois le mme code ou un code similaire mais o les
variables utilises sont diffrentes ? Le copier-coller nest pas une super bonne ide, cest ennuyeux,
a provoque de la redondance, a alourdit le code et le rend moins lisible et a risque dintroduire
des erreurs Do lintrt dutiliser des fonctions !
Ici, oubliez le cours de math, une fonction cest un bout de code quon a mis part et quon a
nomm (le nom de la fonction) afin de pouvoir le rutiliser facilement !
Dclaration
Vous en avez vu dans les exemples prcdents, une fonction se dclare comme ceci :
Un nom
Une liste darguments. Ils sont mis entre crochets ci-dessus car ils sont facultatifs. Ils
permettent de donner des paramtres, des donnes en entre la fonction. Ils ne sont
utilisables que dans le corps de la fonction.
Un corps ; du code quoi
Eventuellement une valeur de retour. La fonction peut se contenter de nexcuter que du
code, mais elle peut galement retourner, renvoyer un rsultat ! Voil qui est pratique
La fonction sappelle hasClass, elle a 2 arguments, element et cls et elle retourne un rsultat,
boolen dans ce cas-ci.
Appel
Une fonction sappelle par son nom, et si elle attend des arguments, il faudra galement lui envoyer
lors de lappel la fonction.
Noubliez pas les (), cest ce qui diffrencie une fonction dune variable.
Toujours par rapport lexemple prcdent, la fonction est appele de cette manire
22
var allSpans = document.querySelectorAll(".span3");
var result = hasClass(allSpans[0], "alert-pink")
Une fonction doit toujours tre dclare avant de pouvoir tre appele !
Une fois sorti du scope de la fonction, il nest plus possible daccder ses variables locales, si vous
faites a, votre code va bien planter
Si vous dclarez et initialisez une variable locale du mme nom quune variable globale, la valeur
prise en compte dans la fonction sera celle de la variable locale. Une fois sorti de la fonction, la
valeur globale reprendra le dessus. Veillez utiliser des noms diffrents afin dviter toute
confusion.
Si les variables sont propres la fonction, mieux vaut les crer comme variables locales, cest plus
propre car il faut user des variables globales avec modration !
Crer des span sous forme de tags partir dun array, mais cette fois avec une
fonction et utilisation dune variable locale
http://jsfiddle.net/cLLS2/
En fait les fonctions anonymes sont trs pratiques pour effectuer du code lors dune action, dun
vnement, sans devoir dclarer une fonction qui ne servirait qu une seule chose bien prcise.
Nous verrons cela plus en dtails dans le chapitre sur le DOM et les vnements.
Sachez dj quil est possible dassigner une fonction anonyme une variable. Je vois que vous
froncez les sourcils En fait il sagit plutt dassigner une rfrence vers la fonction une variable.
a scrit comme ceci :
23
\") repeat scroll 0% 0% transparent";
};
http://jsfiddle.net/fAUwy/
Notez la prsence dun point-virgule la fin de la dclaration de la fonction. Comme nous sommes
dans le cas dune assignation, il est ncessaire, alors quil ne lest pas quand on dclare une fonction
normale .
Vous verrez trs souvent ce genre de syntaxe en JavaScript donc mieux vaut dj sy habituer !
24
Les avantages de jQuery
Vous avez pu vous rendre compte avec les rudiments du langage que nous venons dexplorer que le
JavaScript, cest parfois un peu prise de tte ! Faire de petites choses demande dcrire pas mal de
lignes de code et puis il faut toujours tenir compte de la compatibilit entre les diffrents
navigateurs. Bref, pas toujours simple.
Cest sur ces 2 points que jQuery va nous tre trs prcieux. Son slogan est write less, do more et
de fait, cette librairie a lavantage davoir une syntaxe courte et facile comprendre. Elle permet de
faire en 1 ligne ce qui demanderait des centaines de lignes de code en JavaScript pur. De plus, elle
soccupe pour nous de la compatibilit entre les navigateurs, cest pas beau la vie ?
Un autre avantage non ngligeable ce sont les plug-ins ! Il existe une flope de ces mini-librairies
qui se basent sur jQuery, programmes par des gens comme vous et moi et qui ont un but bien
prcis : un petit systme de rating, la gestion du scroll, faire des parallax, faciliter lutilisation de
Google Maps, etc
jQuery utilise tout simplement du JavaScript pur et dur, celui que nous avons vu prcdemment, il
na donc rien de magique mais une fois que vous y aurez got, vous aurez du mal vous en
passer ! Et tout a gratuitement
Ce nest pas la seule libraire JavaScript qui existe sur le march, cependant elles nont pas toutes la
mme philosophie et but que jQuery, certaines sont destins des programmeurs JavaScript un peu
plus chevronns ! Voici une petite liste de ses concurrentes : MooTools, DojoToolkit, Prototype,
Yahoo UI.
Via CDN
Une autre possibilit est dutiliser un Content Delivery Network, ou CDN. En gros, cest un site web
qui hberge une version de jQuery et vous pouvez directement pointer vers ce site pour inclure
jQuery dans vos pages.
Il en existe plusieurs : chez Microsoft, chez Google, et mme chez jQuery. Il existe de multiples
avantages :
25
Comme dautres sites utilisent les CDNs, vos visiteurs auront peut-tre dj jQuery dans le
cache de leur navigateur vu quils seront passs sur un de ces sites prcdemment, votre
navigateur de devra ds lors plus tlcharger le fichier.
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-
1.9.0.min.js"></script>
<script
src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></
script>
Le DOM
Comme vous tes dj familiers avec lHTML, vous savez que le code HTML peut tre reprsent
sous forme dun arbre. Le code HTML suivant :
<html lang="en">
<head>
<title>Le titre de ma page</title>
<meta name="description" content="youhouuu">
</head>
<body>
<div class="container">
<div class="hero-unit">
<h1>Hello, world!</h1>
<p>Texte dintroduction</p>
</div>
26
<div class="row">
<div class="span4">
<h2>Heading</h2>
<p>Donec id elit non mi porta gravida at eget metus.</p>
<p><a class="btn" href="#">Plus dinfos</a></p>
</div>
</div>
</div>
</body>
</html>
Le DOM ou Document Object Model, cest une reprsentation du code HTML sous forme darbre
dobjets (appels Nodes). Cest sous cette forme que le HTML est mmoris par le navigateur. Il
est possible, en JavaScript, de parcourir cet arbre et donc daccder tous les lments dune page
HTML en vue de la modifier en rajoutant, modifiant ou supprimant des lments!
Une remarque sur le schma : le texte qui se trouve dans un tag (par exemple le texte dun lien) est
vu par le DOM comme un Node spcifique (de type #text).
Note de vocabulaire : dans un cours sur le HTML, on parlera de balises HTML (une paire
de balises en ralit : une balise ouvrante et une balise fermante). Ici, en JavaScript, on
parlera d'lment HTML, pour la simple raison que chaque paire de balises (ouvrante et
fermante) est vue comme un lment.
27
Introduction aux objets
Mais que signifie terme objet dans Document Object Model ? Vous avez peut-tre dj
entendu de langage orient objet , comme le Java ou le C#. Et bien JavaScript lui aussi est
orient objet .
Cest un peu abstrait alors on va viter de partir dans des considrations trop informatiques mais
pour faire simple disons quun objet cest une manire de structurer des informations.
En fait, les types Number, String, Boolean et Array rencontrs prcdemment sont des types
dobjets, appels objets natifs.
On reconnait les objets car ils peuvent contenir 2 types dinformation: des proprits et des
mthodes. Une proprit est une variable qui appartient lobjet et une mthode est une fonction
propre lobjet.
Un objet sinitialise ou sinstancie laide de ce quon appelle un constructeur. Tout cela est fait
automatiquement pour les objets natifs. Nous en verrons plus tard.
Donc, chaque lment du DOM est un objet et possde donc des proprits et des mthodes. Par
exemple, si on rcupre un lment qui correspond un div, on va pouvoir faire :
Changer le style dun div et mettre le contenu dun div enfant en majuscules
http://jsfiddle.net/kbAQU/
Le div a une proprit style qui elle-mme a une proprit backgroundColor et padding
qui permettent respectivement dinfluer sur les styles CSS background-color et padding.
Dans la majorit des exemples vus prcdemment, on utilisait des objets ainsi que leurs proprits
et mthodes.
28
balise HTML, qui peut avoir des attributs comme id ou class, peut avoir des
lments enfants, etc
On dit quun Element hrite dun Node. Un Element possdra donc toutes les
proprits et mthode dun Node.
Attention : le Node #text qui reprsente du texte simple, est un Node et pas un
Element !
Lobjet window
Lobjet window est le point de dpart du DOM, il reprsente la fentre du navigateur. En JavaScript,
l'objet window est dit implicite, c'est--dire qu'il n'y a gnralement pas besoin de le spcifier dans
son code.
De mme, lorsque vous dclarez une variable dans le contexte global de votre script, cette variable
deviendra en vrit une proprit de l'objet window.
Toute variable non dclare (donc utilise sans jamais crire le mot-cl var) deviendra
immdiatement une proprit de l'objet window, et ce, quel que soit l'endroit o vous
utilisez cette variable ! a peut tre trs pratique mais utilisez cette particularit en
connaissance de cause et prfrez le mot-cl var pour dclarer vos variables.
http://jsfiddle.net/4v3Ed/
29
Lobjet document
Lobjet document est une proprit de lobjet window, il correspond au tag <html>. Cest cet objet
qui reprsente la page web et cest via lui que lon va pouvoir accder aux lments HTML du DOM
pour ensuite les modifier.
Il est donc possible, en JavaScript et jQuery, de modifier le DOM. Cest en modifiant le DOM quon
peut par exemple afficher un tooltip quand on clique sur une image, une fentre modale, un
calendrier ou des messages derreurs lorsquon formulaire nest pas valide. Chaque modification
consiste en :
1. Slectionner llment HTML quon souhaite modifier (par exemple, un div afficher en tant
que tooltip ou fentre modale)
2. Faire quelque chose avec cet lment, comme :
a. Changer ses proprits, par exemple sa position, sa couleur de fond,
b. Ajouter du contenu llment
c. Supprimer llment de la page HTML
d. Rcuprer de linformation de llment, par exemple le texte dun input
e. Ajouter/supprimer des classes CSS, par exemple pour changer sa visibilit, sa
typographie,
Une fois llment slectionn, on peut videmment lui appliquer plusieurs actions.
Nous allons voir comment cela est possible en JavaScript pur et en jQuery.
En JavaScript pur
Dans ce chapitre nous allons brivement exposer les proprits et mthodes des objets Node et
Element qui permettent daccder plus en profondeur au DOM et de le modifier.
Nous nallons pas nous attarder dessus, les mmes possibilits existent en jQuery et nous les verrons
dans le chapitre ad hoc. Mais cela vous donnera dj un aperu des possibilits offertes de base
par JavaScript.
Bon, ces mthodes sont quand un peu limites pour des actions complexes, si par exemple on veut
accder tous les td dune table, on va devoir crire un code assez moche et lourd, avec des
boucles mais disons que cest pratique et performant pour des actions trs simples et cibles.
30
Slectionner un lment (mthode rcente)
Du coup, deux mthodes sont rcemment venues complter les 3 classiques pour accder plus
rapidement aux lments du DOM. Malheureusement elles ne sont pas supportes par tous les
browsers. Ce qui les rend un peu inutiles
Elles utilisent, comme jQuery dailleurs, les slecteurs CSS sous forme de string en paramtre.
Tant quon natteint pas un div dfini dune collection de div, on rajoute du code HTML
aux div parcourus notez lutilisation de querySelectorAll()
http://jsfiddle.net/g8XJx/
Adapter la hauteur de 3 div en fonction du plus haut des div notez lutilisation de
getElementById() et children
http://jsfiddle.net/WZ6ac/
Modifier un lment
Proprits et mthodes de lobjet Element permettant de le modifier:
Proprits et mthodes de lobjet Node permettant dajouter ou retirer des lments enfant:
31
Crer des span sous forme de tags partir dun array notez lutilisation de
createElement(), createTextNode() et appendChild()
http://jsfiddle.net/cLLS2/
On cre ici un nouvel lment <a>. Cet lment est cr, mais n'est pas insr dans le document, il
n'est donc pas visible. La mthode document.createTextNode() permet quant elle de crer un
Node #text. Ces mthodes sont beaucoup plus performantes que la cration dlments en jQuery,
que nous verrons galement.
Cela dit, on peut dj travailler sur llment cre, en lui ajoutant des attributs ou mme des
vnements (que nous verrons dans le chapitre suivant). On peut lajouter au DOM via la mthode
appendChild() de lobjet Node.
En jQuery
jQuery est beaucoup plus puissant pour ce qui est de laccs et la modification du DOM. Il utilise
intensivement les slecteurs CSS et soccupe de la compatibilit avec les navigateurs, mme avec le
bon vieux IE6.
$(slecteur)
Le caractre $ est ce quon appelle lobjet jQuery. Cest le point de dpart de nimporte quelle action
que vous allez effectuer avec jQuery. Vous verrez de temps en temps cette syntaxe :
jQuery(slecteur)
Ce qui revient la mme chose que le caractre $, mais quon utilise parfois par soucis de
compatibilit si une autre librairie utilise dj le symbole $.
Les slecteurs CSS de base comme lID, la classe ou le nom de llment sont le cur des CSS
32
ID
Comme document.getElementById(), on peut slectionner un lment partir de son ID avec jQuery
//faon oldschool
var message = document.getElementById(message);
//faon jQuery
var message = $(#message);
Nom de llment
Comme document.getElementsByTagName(), jQuery permet de slectionner des lments HTML
partir de leur nom de tag.
//faon oldschool
var linksList = document.getElementsByTagName(a);
//faon jQuery
var linksList = $(a);
Classe
Un autre slecteur super pratique qui permet de slectionner un ou plusieurs lments partir de
leur classe CSS.
Cette faon de faire est possible avec les nouveauts du DOM document.getSelector() et
document.getSelectorAll() mais comme dj dit, ces mthodes ne sont pas supportes par tous les
navigateurs. Autant donc passer directement par jQuery !
Un exemple dutilisation :
//faon jQuery
var subMenus = $(.submenu);
33
Slecteurs CSS de base activez la console Firebug pour voir les rsultats
http://jsfiddle.net/aASEX/
Modifier un lment
Une fois votre lment slectionn, vous pouvez effectuer une srie daction partir de cet lment.
Si vous ne donnez aucun texte en paramtre la mthode, dans ce cas vous pouvez rcuprer la
valeur du texte de llment, pour le mettre dans une variable par exemple.
La mthode html() quant elle permet de modifier le contenu HTML dun lment. Si llment
slectionn contient dj du inner HTML, celui-ci sera remplac par celui que vous spcifiez en
paramtre.
Si vous ne donnez aucun texte en paramtre la mthode, dans ce cas vous pouvez rcuprer la
valeur du inner HTML llment, pour le mettre dans une variable par exemple.
http://jsfiddle.net/kmRBL/
34
Lire et modifier ses attributs
La mthode attr() permet de lire la valeur dun attribut dun lment. Par exemple, pour rcuprer
ladresse dune image dans la page, vous pourriez faire ceci
Si vous passez un 2me attribut la mthode attr(), vous pouvez alors dfinir la valeur de lattribut en
question. Si vous souhaitez par exemple modifier le chemin vers limage de lexemple prcdent :
Si vous souhaitez effacer un attribut, l il faut utiliser la mthode removeAttr(). Par exemple pour
retirer lattribut alt de limage :
$(#banner img).removeAttr(alt);
http://jsfiddle.net/MLtMt/
addClass() ajoute la classe CSS spcifie en paramtre llment slectionn. Cette mthode
ncrase pas les classes dfinies prcdemment mais se contente de rajouter la classe spcifie.
$(.btn).addClass(btn-success);
removeClass() fait exactement linverse en enlevant la classe CSS spcifie de llment slectionn.
$(.btn).removeClass(btn-success);
35
toggleClass() quant elle ajoute la classe si elle nexiste pas et lenlve si elle existe. Cest pratique
pour des lments qui ont un tat on/off par exemple.
http://jsfiddle.net/zgSF8/
Vous allez surtout utiliser cette mthode pour modifier une proprit. Par exemple :
$(.btn).css(font-size, 200%);
http://jsfiddle.net/fHPYs/
Supprimer un lment
Vous pouvez bien entendu effacer un ou plusieurs lments de la page web avec remove().
Mettons que vous avez un div avec lID popup , qui serait une fentre modale, et que vous voulez
leffacer de la page :
$(#popup).remove();
Cela marche aussi si vous spcifiez un slecteur qui concerne plusieurs lments ils seront tous
effacs.
Vous pouvez galement remplacer un lment par autre chose avec replaceWith(). Disons que vous
avez une img avec lID product101 et vous voulez mettre du texte la place car le produit li a
t ajout un panier dachat.
36
$(#product101).replaceWith(<p>Ajout au panier</p>);
Vous pouvez galement crer un nouvel lment en utilisant la manire JavaScript pure
avec document.createElement() cette faon de faire est plus rapide que la manire
jQuery.
append() : ajoute llment (ou le code HTML spcifi en string) en paramtre comme
dernier enfant de llment slectionn
appendTo() : ajouter llment slectionn un parent, comme premier enfant
prepend() : ajoute llment (ou le code HTML spcifi en string) en paramtre comme
premier enfant de llment slectionn
prependTo() : ajouter llment slectionn un parent, comme dernier enfant
after() : ajoute llment (ou le code HTML spcifi en string) directement aprs llment
slectionn
before() : ajoute llment (ou le code HTML spcifi en string) directement avant llment
slectionn
37
Tant quon natteint pas un div dfini dune collection de div, on rajoute du code HTML
aux div parcourus on utilise jQuery et la mthode append()
http://jsfiddle.net/4XbR5/
Enchainement de mthodes
Une fonctionnalit super intressante de jQuery est ce quon appelle lenchainement de mthodes.
En fait, toutes les mthodes que nous venons de voir peuvent tre connectes, mises la chaine
lune de lautre. Cela permet de faire plusieurs choses en une seule ligne de code !
$("#tags").append(
$("<span></span>").addClass("orange").text(HTML 5)
);
Gnial non ? Si vous trouvez cela dur lire, vous pouvez crire chaque mthode la ligne, comme
ceci :
$("#tags").append(
$("<span></span>")
.addClass("orange")
.text(HTML 5)
);
Crer des span sous forme de tags partir dun array on utilise jQuery avec la
cration dlment, append() et text(), avec enchainement des mthodes
http://jsfiddle.net/GDALW/
Par exemple, imaginons quon ait une page avec plusieurs chapitres et que nous voulons gnrer
une table des matires automatiquement, sans se prendre la tte. Si un jour on rajoute un chapitre,
la table des matires se mettrait jour toute seule.
38
Vous vous rappelez des boucles et plus prcisment de la boucle for ? Elle nous permettait de
boucler sur un ensemble dlments, h bien une possibilit similaire existe un jQuery : la mthode
each().
La mthode each() peut tre chaine une slection afin de boucler sur chaque lment de la
slection et leur appliquer la mme action, au sein dune fonction anonyme. Sa syntaxe est celle-ci :
$(slecteur).each(function() {
action1;
action2;
action3;
});
a fait beaucoup de ( et de { tout a hein ? Les parenthses et les accolades sont mises en vidence
pour plus de clart. Commencez toujours par crire le bloc dinstruction sans code lintrieur puis
remplissez avec votre code, vous ferez moins derreurs.
Une fois lintrieur du each(), vous allez bien souvent devoir accder llment courant afin de
lire ou modifier ses proprits. Dans le cas de notre table des matires, nous devrons accder au
nom du chapitre et son ID pour pouvoir crer un lien (ancre).
Cela est possible via le mot-cl this, ce mot-cl correspond llment courant du DOM (Element). A
chaque passage de boucle, la valeur de this changera : il correspondra au premier lment au
premier passage, au deuxime lment au deuxime, ainsi de suite Cependant this ne vous
permettra daccder quaux mthodes et proprits standard de lobjet Element, si vous voulez faire
du jQuery avec, il va falloir le transformer en quivalent jQuery en crivant $(this).
$("h2").each(function() {
//on rcupre le texte
var chapterName = $(this).text();
console.log(chapterName);
});
Adapter la hauteur de 3 div en fonction du plus haut des div on utilise jQuery et les
mthodes each() et css()
http://jsfiddle.net/jY4bL/
http://jsfiddle.net/GNGRm/
39
Plus sur le DOM: http://api.jquery.com/category/manipulation/
Les vnements
Le concept dvnement
On dit souvent que JavaScript permet de faire des sites web interactifs, en effet, on voit souvent
dans les sites web des actions qui se dclenchent lorsquon interagit avec des lments sur la page :
bote de dialogue qui souvre lors dun clic de souris sur un lien, des lments qui changent de taille
ou de couleur quand la souris passe dessus, des interactions possibles avec le clavier, etc tout cela
est possible grce aux vnements.
Un vnement reprsente le moment prcis o quelque chose arrive, pour vous permettre de mieux
comprendre, voici une liste des vnements principaux des lments HTML :
Mais il existe des vnements spcifiques pour lobjet window galement, comme :
Pour info, lvnement resize sera trs utile dans le cas o vous voulez faire un site web responsive,
cest--dire qui sadapte en fonction de lcran du visiteur (cran normal, tablette, smartphone,etc)
40
Associer un vnement un lment
Associer un vnement un lment en JavaScript ou jQuery ressemble trs fort ce que nous
avons vu pour modifier les proprits dun lment, cela consiste en 3 tapes :
En JavaScript
Concrtement il existe plusieurs manires dassocier un vnement un lment HTML en
JavaScript pur, retenez surtout la premire :
2. Via le DOM, la manire DOM-2 . Cest plus propre mais il y a pas mal de problmes
de compatibilit entre les navigateurs (Internet Explorer gre diffremment des autres le
cycle de vie dun vnement), du coup cest assez compliqu utiliser. Cette manire fait
appel la mthode addEventListener(). Sachez les reconnaitre mais prfrez la manire plus
simple du DOM-0
myButton.addEventListener('click', function() {
console.log("Clic sur le bouton");
}, false);
3. Directement depuis lHTML. Cette mthode est proscrire car elle mlange le code et
lHTML et ne respecte donc pas la separation of concerns. Cest comme quand vous mettez
des styles directement depuis lattribut style sans passe par une CSS, pas terrible quoi. Cela
scrit de cette manire :
41
Avec jQuery
Avec jQuery, nous allons comme toujours utiliser les slecteurs CSS pour slectionner le(s)
lment(s) au(x)quel(s) associer lvnement.
Ensuite nous allons chainer une mthode dont le nom correspond exactement au tableau des
vnements. Par exemple click() ou mouseover().
Enfin nous allons passer une fonction, gnralement une fonction anonyme.
Syntaxe :
$(slecteur).vnement(function() {
action1;
});
Crer des span sous forme de tags partir dun array on utilise jQuery avec des
vnements souris
http://jsfiddle.net/S8nt7/
Il est possible dappeler un vnement manuellement (si vous voulez par exemple, simuler un clic de
souris sur un lment partir dune autre action), dans ce cas, il suffit dappeler la mthode
correspondant lvnement sur llment slectionn mais sans fournir de paramtre la
mthode.
Il existe un vnement supplmentaire en jQuery qui nexiste pas nativement en JavaScript, cest
lvnement hover(). Il est utiliser quand vous voulez effectuer une action lorsque la souris passe
sur un lment et puis une autre action lorsque la souris sort de llment.
Il faut donc lui donner 2 actions , en code cela va se traduire par 2 fonctions anonymes passer
lvnement. Voici sa syntaxe :
$(slecteur).hover(
function() {
//Action quand la souris passe sur llment
},
function() {
//Action quand la souris part de llment
}
42
);
Par exemple, supposons que le visiteur passe sa souris au-dessus dun lien avec lID menu , vous
voulez faire apparatre un div (par dfaut non-visible) avec lID submenu . Quand la souris quitte
le lien, vous voulez faire de nouveau disparatre le submenu
$(#menu).hover(function() {
$(#submenu).show();
}, function() {
$(#submenu).hide();
}) ;
http://jsfiddle.net/r8rPS/
Quand une page web se charge, le navigateur va immdiatement essayer de lancer tous les scripts
quil rencontre. a peut tre problmatique avec un script qui manipule le contenu de la page et qui
se lance avant que tout le contenu de la page soit charg Cela gnrera plein derreurs !
Il faut donc dire au script attend que la page soit charge pour te lancer .
Cest possible en JavaScript via la mthode window.load() mais cette mthode attend que tous les
contenus associs (images, CSS, scripts, animations Flash, vidos) soient chargs pour se lancer et
a peut prendre pas mal de temps ! Heureusement, jQuery fournit la mthode ready() qui attend
que la page soit charge mais nattend pas tous les contenus comme les images, vidos, ou autre.
$(document).ready(function() {
//votre code ici
}) ;
$(function() {
//votre code ici
}) ;
Vous devez rajouter ce code chaque page o vous souhaitez excuter du code lorsque la page est
charge. Si vous vous retrouvez avec plusieurs ready(), ce nest pas un problme.
43
Lobjet Event
Vous vous demandez peut-tre : mais comment je fais pour rcuprer la position de la souris
alors ? ou comment je peux savoir sur quelle touche lutilisateur vient dappuyer ? . On peut
bien sr rcuprer ces informations, a se fait via lobjet Event.
Cet objet est bien particulier dans le sens o il n'est accessible que lorsqu'un vnement est
dclench. Son accs ne peut se faire que dans une fonction excute par un vnement, cela se fait
de la manire suivante en jQuery
Lobjet Event contiendra des proprits diffrentes en fonction du type dvnement, si lvnement
est une action avec la souris il contiendra pageX et pageY (les coordonnes de la souris), tandis que
si cest un keypressed il contiendra which (le code ASCII de la touche).
http://jsfiddle.net/sfWns/
http://jsfiddle.net/Wfgcm/
Certains lments HTML ont une rponse prprogramme aux vnements, par exemple un lien
charge une page quand on clique dessus, un formulaire envoie ses donnes un serveur web, etc
Il arrive que lon veuille couper le comportement normal de cet vnement : que le lien ne
redirige pas vers la page ou que le formulaire ne poste pas ses donnes vers le serveur car certains
de ses champs ne sont pas remplis correctement.
44
Dans ce cas, il suffit, une fois dans le corps de la fonction anonyme associe lvnement,
dappeler la mthode preventDefault() de lobjet Event ou de simplement retourner la valeur false.
$(#myLink).click(function(e) {
e.preventDefault();
});
Equivaut
$(#myLink).click(function(e) {
return false;
});
{
proprit1 : valeur1,
proprit2 : valeur2
}
La proprit et la valeur sont spars par : et chaque paire proprit/valeur doit tre spare par
une virgule mais il ne fait pas en mettre aprs la dernire paire proprit/valeur ! Les apostrophes
autour des proprits sont facultatives sauf si les noms des proprits contiennent des caractres
spciaux.
var data = {
firstName : Michel,
lastName : Dupont,
city : Bruxelles
};
45
Et aprs on peut bien sr rcuprer chaque proprit individuellement :
console.log(data.firstName);
$(#menu).animate(
{
left : 0,
fontSize : 15
}
);
Pour rappel, un Array est une variable qui contient plusieurs valeurs, appeles items. Chaque item
est accessible au moyen d'un indice (index) numrique. Dans un tableau associatif, on accde un
item non pas par un indice numrique mais pas une valeur textuelle appele cl (ou key).
Les proprits dun objet littral peuvent tre donc vues comme des cls qui permettent daccder
aux valeurs du tableau associatif.
var data = {
firstName : Michel,
lastName : Dupont,
city : Bruxelles
};
data[firstName] = Jean;
Pour rajouter des lments ce tableau, il suffit simplement de spcifier une nouvelle proprit/cl
en lui donnait une valeur, par exemple :
data.country = Belgique;
46
data[country] = Belgique;
La boucle for in
Il existe une variante de la boucle for qui sappelle for in. Cette boucle permet de boucler sur un
tableau associatif (et donc par dfinition, sur un objet littral !). Le fonctionnement est quasiment le
mme que pour un Array, except qu'ici il suffit de fournir une variable cl qui reoit un
identifiant (au lieu d'un index) et de spcifier l'objet parcourir :
Quel est lintrt ? Les objets littraux se voient souvent attribuer des proprits ou mthodes
supplmentaires par certains navigateurs ou certains scripts tiers utiliss dans la page, ce qui fait que
la boucle for in va permettre de tous les numrer.
Dans les chapitres prcdents, vous avez appris la base de jQuery : slectionner des lments, les
modifier, et leur attacher des vnements.
Maintenant cest lheure de passer au ct le plus fun de jQuery, les effets visuels ! Comme pour la
modification et les vnements, il faut :
1. Slectionner le (ou les) lment(s) HTML avec le(s)quel(s) sur le(s)quel(s) on veut appliquer
un effet
2. Appliquer leffet via la mthode ad hoc en donnant des paramtres la mthode deffet
pour le contrler
Apparatre et disparatre
Les effets les plus simples sont aussi les plus souvent utiliss. Voici les mthodes qui permettent de
faire apparatre et disparatre des lments.
47
slideToggle() : si llment est cach, il saffiche ; sil est affich, il se cache avec un effet de
glissement
Toutes ces mthodes peuvent recevoir un paramtre pour contrler la vitesse dapparition ou de
disparition. Il se prcise soit en string : slow, normal (par dfaut) ou fast ; soit en nombre de
millisecondes. Par exemple :
Un autre effet permet de faire passer un lment une certaine opacit : fadeTo(). Il prend en
paramtre une valeur de vitesse, comme les autres, mais aussi un pourcentage dopacit.
http://jsfiddle.net/r3XH9/
Les animations
Il est possible de faire des animations plus personnalises grce la mthode animate() qui permet
de jouer avec toute les proprits CSS numriques (taille de la police, position dun lment, opacit,
largeur dune bordure,)
un objet littral avec la liste des proprits CSS quon dsire changer et les valeurs que
doivent atteindre lanimation. Par exemple si vous voulez animer un lment en le dplaant
de 650px vers la gauche, en changeant son opacit 50% et agrandir sa police 24px :
{
left : 650px,
opacity : 0.5,
fontSize : 24px
}
la dure de lanimation, en millisecondes - facultatif, 400 par dfaut
leffet de transition (easing) facultatif. De base uniquement les effets swing ou linear
sont possibles mais vous pouvez en avoir plus via cette librairie
http://gsgd.co.uk/sandbox/jquery/easing/
Une mthode de callback facultatif. Il est possible de dire la mthode animate() de
dclencher une mthode une fois que lanimation est termine.
http://jsfiddle.net/WsUcH/
48
Afficher la table des matires auto-gnre lors dun passage de la souris avec un slide
horizontal
http://jsfiddle.net/r8rPS/
http://jsfiddle.net/dTtpT/
Bien souvent, vous nutiliserez que les slecteurs de base. Mais pour des oprations plus complexes
vous pourriez tre amens combiner des slecteurs et utiliser des fonctions avances telles que :
Les slecteurs descendants : pour cibler un tag qui se trouve dans un autre tag. Par exemple
pour pouvoir slectionner tous les liens situs dans un ul qui aurait lID navbar vous
cririez :
Les slecteurs enfants : pour cibler un tag qui est enfant dun autre. Par exemple,
slectionner les p qui se trouve directement sous le body :
Les slecteurs adjacents : pour slectionner un tag qui se trouve juste aprs un autre. Si
vous voulez par exemple slectionner un div qui se trouve dans lHTML juste aprs un h2
avec lID header , vous sparez les 2 slecteurs par un +
49
Les slecteurs dattributs : pour slectionner des lments qui possdent un certain attribut
ou dont un certain attribut possde une valeur spcifique. Par exemple si vous voulez
slectionner tous les tags img qui possdent un attribut alt, ou tous les tags a qui pointent
vers un site extrieur (dont le href commence par http://)
Voici les diffrentes possibilits :
o [attribut] : slectionne les lments qui possde lattribut spcifi
o [attribut= valeur ] : slectionne les lments dont lattribut spcifi possde la
valeur indique
o [attribut^= valeur ] : slectionne les lments dont lattribut spcifi commence
avec la valeur indique
o [attribut$= valeur ] : slectionne les lments dont lattribut spcifi termine
avec la valeur indique
o [attribut*= valeur ] : slectionne les lments dont lattribut spcifi contient
avec la valeur indique
Les filtres
jQuery donne la possibilit de filtrer les slection en fonction de certains critres. Par exemple, si
vous ajoutez :even la suite dun slecteur, alors vous ne rcuprez que les lments pairs dun
groupe dlments.
De plus, vous pouvez des lments qui contiennent un tag particulier, un texte spcifique, les
lments cachs et mme ceux qui ne correspond pas un certain slecteur. Pour utiliser un filtre,
rajouter un deux-points suivi du nom du filtre :
:even et :odd : ne renvoie que les lments pairs ou impairs dun groupe dlments
attention, ils se basent sur lindex, comme dans un tableau, cest--dire 0,1,2,3, :even
correspondra donc en fait, aux lments impairs, cest un peu bizarre mais cest comme
a
:first et :last : slectionne le premier ou dernier lment dun groupe dlments
:hidden : trouve les lments cachs (avec display:none ou sur lesquels .hide() a t appel)
:visible : le contraire de :hidden
contains() : trouve les lments qui contiennent un texte spcifique spcifi en paramtre
(sutilise comme une mthode)
50
Mais il existe aussi des mthodes pour filtrer les lments dune slection :
Exemples de filtres
http://jsfiddle.net/5NEuW/
Parcourir le DOM
Bien souvent, aprs avoir slectionn un lment vous allez vouloir trouver dautres lments en
relation avec celui-ci. Par exemple, dans vous vous retrouvez dans la fonction lie lvnement
click sur une image, vous voulez retrouver un span enfant pour le faire apparaitre ou disparaitre ou
un div parent pour lui appliquer un style. Cest l que les mthodes qui permettent de traverser le
DOM entrent en piste. Elles permettent, partir dun lment slectionn, de trouver dautres
lments, toujours via un slecteur CSS.
51
Les mthodes utilitaires
Les plug-ins
Quand on parle de jQuery on entend souvent le terme plug-in. Un plug-in jQuery cest du code crit
en JavaScript et qui utilise massivement jQuery pour but bien prcis : afficher un calendrier, fournir
des effets visuels, permettre une gestion des cookies plus aise, afficher des lightbox, afficher des
sliders, afficher des notifications, etc
Ils consistent en 1 ou plusieurs fichiers .js inclure dans vos pages et parfois dun fichier .css qui va
styler le contrle utilisateur offert par le plug-in.
jQuery UI
Il ne faut pas chercher bien loin pour trouver des plug-ins jQuery, en effet il existe un pack de
contrles utilisateurs disponibles sur le site de jQuery, jQuery UI. Ces contrles permettent
dafficher un simple choix de date fournir quantit dautres contrles, effets et interactions. Par
exemple :
un accordon
un systme dautocomplete
des boutons dj styls
un choix de date
une barre de progression
des tabs
une gestion du drap&drop
etc
Autres plug-ins
Il existe une quantit dautres plug-ins gratuits disponibles, voici une liste non-exhaustive :
52
Savoir si lutilisateur est dj venu sur le site auparavant :
http://www.ravelrumba.com/blog/firstimpression-js-library-detecting-new-visitors/
Utiliser Google Maps de manire simple : http://hpneo.github.com/gmaps/ -
http://gmap3.net
Gnrer une table des matires automatiquement : http://projects.jga.me/toc/
Organiser le contenu en tuiles : http://masonry.desandro.com/
Faciliter lexcution dune fonction quand on scrolle un lment :
http://imakewebthings.com/jquery-waypoints/
Parallax, navigation fixe, autoscroll, : https://github.com/Prinzhorn/skrollr
Pour raliser des potentiomtres : http://anthonyterrien.com/knob/
Pour raliser des notifications : http://needim.github.com/noty/ -
http://richardhsu.github.com/jquery.ambiance/
Afficher des infos complmentaires qui apparaissent sur le ct : http://srobbin.com/jquery-
plugins/pageslide/
Tooltips : http://craigsworks.com/projects/qtip2/
Rating : http://wbotelhos.com/raty/
Sliders : http://www.jqueryslidershock.com/ - http://dev7studios.com/nivo-slider/
Carousel : http://demo.dev7studios.com/caroufredsel/ - http://als.musings.it/
Gestion du scroll : https://github.com/sxalexander/jquery-scrollspy
Gestion des images de background : http://srobbin.com/jquery-plugins/backstretch/ -
http://static.elliotjaystocks.com/responsive-background-images/examples/solution.html
Lightbox : http://www.jacklmoore.com/colorbox
Transformations et transitions CSS : http://ricostacruz.com/jquery.transit/
Slecteur But
:input Slectionner tous les lments de formulaire
53
:image Slectionne tous les boutons image
:reset Slectionne tous les boutons reset
:button Slectionne tous les champs avec le type button
:file Slectionne tous les champs dupload
:hidden Slectionner tous les champs cachs
Ces slecteurs peuvent bien sr tre combins dautres slecteurs. Ils sutilisent, par exemple
comme ceci (slectionner tous les champs cachs du formulaire myForm) :
En plus, jQuery offre 2 slecteurs pour permettre de rcuprer les valeurs slectionnes dans des
boutons radio/cases cocher et dans des listes droulantes :
Slecteur But
:checked Slectionne les lments cochs (dans le cas de boutons radio ou cases
cocher)
:selected Slectionne les lments slectionns dans une liste droulante
Exemple dutilisation :
Pour lire et modifier des valeurs, il suffit dutiliser la mthode .val(). Sans paramtre, celle-ci renvoie
la valeur du champ sur laquelle elle est appele, et si on lui donne une valeur en paramtre, cela
aura pour effet de modifier le contenu du champ.
54
Dans le cas des boutons radio et des cases cocher, on peut sy prendre autrement.
Pour lire la valeur, il faut vrifier si le radio/case cocher est coch ou pas, et pour ce faire on peut
utiliser le filtre is()
Et pour cocher/dcocher une case cocher ou un radio, on peut utiliser la mthode attr() sur
lattribut checked
$("#rememberMeInput").attr('checked', true);
Les vnements
De manire similaire aux vnements dj vus, comme un clic de souris sur un lien ou une touche du
clavier qui est presse, il existe des vnements spcifiques aux formulaires. Ils sont au nombre de
5 : submit, focus, blur, click et change.
submit
Lvnement submit est dclench lors de lenvoi dun formulaire, que a soit en cliquant sur le
bouton submit ou en appuyant sur Enter quand vous tapez dans un champ texte du formulaire.
Cest lors de cet vnement que vous pouvez vrifier si le formulaire est valide ou non, en lui
associant du code via la mthode .submit().Dans le cas o le formulaire nest pas valide, il est
possible dannuler son envoi via un return false;
$("#registration").submit(function() {
console.log($("#name").val());
//empcher l'envoi du formulaire
return false;
});
focus
Quand vous cliquez dans un champ dun formulaire, ce champ reoit ce quon appelle le focus. Il est
possible deffectuer une action lors du focus, en slectionnant le champ et en lui appliquant la
mthode .focus().
$("#name").focus(function() {
console.log($(this).val());
});
55
Pour rappel, un vnement peut tre appel manuellement si on ne lui fournit pas de paramtre.
Dans le cas de .focus() le focus sera mis sur llment slectionn. Ce qui peut tre pratique pour
dj positionner le curseur de texte dans le premier champ dun formulaire par exemple.
blur
Cest un peu le contraire de focus, blur est dclench lorsque vous quittez un champ dun formulaire.
Cela peut tre utile pour vrifier la validit des champs au fur et mesure du remplissage du
formulaire et non tout la fin, lors du submit. Pour effectuer une action lors du blur, il faut
slectionner le champ et lui appliquer la mthode .blur()
$("#name").blur(function() {
console.log($(this).val());
});
click
Il est videmment possible dintercepter un clic sur un lment dun formulaire, par exemple pour
effectuer une action lorsquune case cocher est coche. Cela fonctionne de manire similaire au
click vu prcdemment
$("#rules").click(function() {
console.log($(this).is(":checked"));
});
change
Lvnement change peut tre utilis dans le cas o vous voulez appliquer une action lorsque la
valeur dune liste droulante change .
$("#level").change(function() {
console.log($(this).val());
});
Via jQuery il est bien sr possible de contrler lactivation dun champ ou bouton en lui
appliquant/retirant cet attribut de la manire suivante
56
//activer
$("#sendFormButton").attr('disabled',false);
//dsactiver
$("#sendFormButton").attr('disabled',true);
Valider un formulaire
Introduction
La validation ct client (en JavaScript donc) est une tape essentielle lors de la mise en place dun
formulaire. Elle permet de sassurer que les donnes rentres par lutilisateur sont bien prsentes
(par exemple une adresse de livraison dans le cas dune commande) et quelles correspondent au
format attendu (un format de-mail pour une adresse mail, un texte sous forme de date pour une
date, un chiffre pour une quantit, etc)
En JavaScript pur, cela peut vite devenir long compliqu de valider un formulaire, il faut notamment
connatre les expressions rgulires. Heureusement, en jQuery, ces vrifications sont trs simples
mettre en place grce au plugin jQuery Validate.
Il y a 2 manires de rajouter de la validation sur un formulaire avec jQuery Validate ; soit une
mthode simple qui consiste attribuer des classes et attributs spcifiques dans lHTML, sur les
lments valider (indiquant sils sont requis, leur type attendu, le message derreur etc) ; soit la
manire avance qui consiste configurer la validation en JavaScript. Cette approche est
prfrer car elle permet daller beaucoup plus loin.
Configurer la validation
Pour configurer la validation, il faut dabord donner une valeur lattribut name de vos champs.
Ensuite, il faut appeler la mthode validate() sur le formulaire et lui passer un objet littral qui va
dfinir des rgles et, pour ces rgles des messages derreur.
La syntaxe est :
$(#myform).validate({
rules : {
nomDuChamp : typeDeValidation
},
messages : {
nomDuChamp : {
57
}
}) ;
Par exemple
$("#orderForm").validate({
rules: {
inputMail: {
required: true,
email: true
}
},
messages: {
inputMail:
{
required : "Le-mail est requis",
email: "L'e-mail n'a pas un format correct"
},
}
}) ;
Voici les types de validation les plus utiliss quoffre jQuery Validate :
Validation But
required Le champ est requis
date La valeur du champ doit tre une date
email La valeur du champ doit tre un e-mail
url La valeur du champ doit tre un URL
number La valeur du champ doit tre un nombre dcimal
digits La valeur du champ doit tre un nombre entier
equalTo La valeur du champ doit gal la valeur dun
autre champ
minlength La longueur de la valeur du champ doit tre
suprieure une certaine valeur
maxlength La longueur de la valeur du champ doit tre
infrieure une certaine valeur
min La valeur du champ doit tre suprieure une
certaine valeur
max La valeur du champ doit tre infrieure une
certaine valeur
Il est galement possible de dfinir ses propres mthodes de validation via la mthode addMethod()
qui demande : un nom, une fonction de validation et un message derreur par dfaut.
Si le formulaire nest pas valide, le formulaire ne sera pas envoy vers le serveur.
58
A noter que si le formulaire envoie ses donnes via une requte AJAX, il faut dfinir
laction faire dans le cas o le formulaire est valide dans loption submitHandler de la
mthode validate().
Par exemple, si vous avez un champ comme ceci dans votre HTML :
Il suffit ds lors dajouter dans votre CSS de quoi styler la classe error . Mais si vous voulez faire
plus lors de laffichage des messages derreur (comme styler un autre lment), vous pouvez utiliser
dautres options de .validate() comme errorPlacement, highlight, etc
Introduction
Les applications web ressemblent de plus en plus des applications desktop , le temps o votre
page web se rafraichissait compltement lorsque vous effectuiez une action est presque
rvolu grce AJAX.
AJAX (acronyme pour Asynchronous JavaScript And XML) permet une page web de contacter un
serveur web et de se rafraichir elle-mme avec les donnes renvoyes par le serveur. Cela ouvre les
portes des centaines de possibilits, comme :
59
Envoyer un formulaire et afficher un rsultat instantanment
Se logguer sans quitter la page
Parcourir des longues listes
Etc
Des sites comme Google Maps, Google Docs, Facebook, Twitter ou autres utilisent AJAX
abondamment.
Fonctionnement
Comme vu dans le Le B-A-BA d'Internet, lors dun appel de page classique , le navigateur contacte
le serveur web, qui renvoie une nouvelle page au navigateur.
Lors dun appel AJAX, le navigateur ne demande au serveur que de nouvelles informations. Le
serveur renvoie les donnes demandes, et le contenu et lapparence de la page sont mis jour avec
laide de JavaScript.
Le navigateur web : via lobjet XMLHttpRequest de votre navigateur, JavaScript peut parler
un serveur web et recevoir de linformation en retour
JavaScript : cest lui qui fait le gros du boulot. Il envoie une requte au serveur, attend pour
une rponse, traite la rponse et met jour la page en ajoutant du contenu (en manipulant
le DOM) ou en adaptant laffichage de la page.
Linformation envoye peut tre aussi bien le dtail dun formulaire, quun simple donne
(par ex. un rating sur un article). Linformation reue en retour peut aussi bien tre une
simple phrase ( Merci de votre vote ) quune liste de nouveaux enregistrements (dans le
cas dun e-commerce par exemple)
Le serveur web : le serveur reoit donc des requtes du navigateur et lui renvoie des
informations. Les informations peuvent tre aussi bien du texte, quun bout de code HTML,
de XML ou de donnes JSON.
Le serveur quant lui peut aussi bien tre un serveur IIS qui fait tourner de lASP.NET, quun
serveur Apache avec PHP.
Il est tout fait possible deffectuer des appels AJAX en JavaScript pur via lobjet XMLHttpRequest,
mais il est bien plus ais dutiliser jQuery.
Mthodes jQuery
jQuery offre plusieurs mthodes pour effectuer des appels asynchrones en AJAX, les voici :
.load()
.load() permet de charger le contenu d'une autre page web et de placer le contenu dans le slecteur
sur lequel la mthode est appele.
Il est possible de lui prciser un slecteur de la page cible afin de ne slectionner qu'une partie de la
page charger.
Cette mthode ne requiert pas d'intervention de la part d'un serveur web.
60
//charge le contenu de llment #newsItem de la page today.html
dans llment #headlines de la page courante
$(#headlines).load(today.html #newsItem);
$.get() et $.post()
$.get() et $.post() : ces mthodes (autonomes) permettent de charger des donnes d'un serveur web
via une requte GET ou POST.
Les donnes renvoyes peuvent tre de diffrents formats: texte, HTML, XML ou JSON
$.getJSON()
$.getJSON() permet de charger des donnes d'un serveur web au format JSON via une requte GET.
Cette mthode est identique $.get mais le format renvoy est doffice du JSON
$.ajax()
Cette mthode est la plus complte et flexible de toutes. $.get, $.post et $.getJSON sont des
raccourcis de $.ajax(). Cest donc galement celle qui demande le plus de configuration.
Pour la configurer, il suffit de lui passer un objet littral. Les paramtres de cet objet les plus
couramment utiliss sont :
61
Plus sur AJAX avec jQuery : http://api.jquery.com/category/ajax/
Les cookies
Les cookies ont t invents par Netscape afin de donner une "mmoire" aux serveurs et
navigateurs Web. Le protocole HTTP, qui gre le transfert des pages Web vers le navigateur ainsi que
les demandes de pages du navigateur vers le serveur, est dit stateless (sans tat) : cela signifie
qu'une fois la page envoye vers le navigateur, il n'a aucun moyen d'en garder une trace. Vous
pourrez donc venir deux, trois, cent fois sur la page, le serveur considrera toujours qu'il s'agit de
votre premire visite.
Cela peut tre gnant plusieurs titres : le serveur ne peut pas se souvenir si vous tes authentifi
une page protge, n'est pas capable de conserver vos prfrences utilisateur, etc. En rsum, il ne
peut se souvenir de rien ! De plus, lorsque la personnalisation a t cre, cela est vite devenu un
problme majeur.
Les cookies ont t invents pour remdier ces problmes. Il existe d'autres solutions pour les
contourner, mais les cookies sont trs simples maintenir et trs souples d'emploi.
Ils sont stocks sous forme de fichiers textes dans le rpertoire de fichiers temporaires de votre
navigateur et permettent, par exemple, de retenir un choix de langue effectu par lutilisateur sur
votre site afin de ne pas devoir lui redemander sa prochaine visite.
jsFiddle lui utilise par exemple les cookies pour se souvenir des positions et des grandeurs des
diffrentes fentres.
On peut crer et lire des cookies avec du code ct serveur mais cest galement possible de le faire
en JavaScript !
Si vous voulez stocker des informations dans un cookie, vous devrez spcifier 3 choses :
Mthodes de cration et daccs aux cookies + utilisation dun cookie dans le cas dun
choix de langue FR/NL
http://jsfiddle.net/BFmdg/
62
Pour vrifier les cookies, leur valeur et date dexpiration vous pouvez utiliser longlet Cookies de
Firebug
A savoir, pour des raisons de scurit, vous ne pouvez pas modifier la valeur des cookies
marqus comme Http Only en JavaScript ! Vous pouvez voir ces types de cookies dans
Firebug galement. Ce sont gnralement des cookies qui contiennent des informations
sensibles comme un identifiant de session
Lobjet Date
La date dexpiration nous offre une possibilit de parler brivement dun autre type dobjet : lobjet
Date. Nous nallons pas nous tendre dessus car vous ne serez pas beaucoup amens lutiliser mais
cest toujours bon savoir quil existe.
Dans lexemple des cookies, on envoie un nombre de jours dexpiration la mthode createCookie(),
en fait, cette mthode crer un objet Date qui reprsente la date courante et lui additionne le
nombre de jours
Important savoir, JavaScript stocke les dates en millisecondes. Mais heureusement pour nous, le
constructeur de lobjet Date peut prendre en charge plusieurs paramtres pour nous permettre de
construire une date, mais retenez surtout ces deux-cis :
new Date();
new Date(anne, mois, jour [, heure, minutes, secondes,
millisecondes ]);
63
La premire ligne instancie un objet Date dont la date est fixe celle de l'instant mme de
l'instanciation.
La deuxime ligne permet de spcifier manuellement chaque composant qui constitue une
date, nous retrouvons donc en paramtres obligatoires : l'anne, le mois et le jour. Les
quatre derniers paramtres sont facultatifs (c'est pour cela que vous voyez des crochets, ils
signifient que les paramtres sont facultatifs). Ils seront initialiss 0 s'ils ne sont pas
spcifis, nous y retrouvons : les heures, les minutes, les secondes et les millisecondes.
Une fois un objet Date instanci, vous pouvez utiliser ces mthodes :
http://jsfiddle.net/fkKMv/
Le debug
Il est trs rare voir presque impossible de programmer sans faire derreurs les fameux bugs qui
plantent notre application sont si vite arrivs.
Mais quel type derreurs peut-on bien faire ? Cela peut tre une erreur de frappe : on a oubli un
caractre, on a mal orthographi le nom dune fonction et du coup JavaScript ne la trouve pas, ou
alors on a simplement fait une erreur dans notre logique en faisant une division au lieu dune
multiplication.
Avec les vieux navigateurs, les messages derreur JavaScript ntaient pas des plus parlants, et il
fallait user et abuser de la mthode alert(), quon dissminait un peu partout dans le code en
esprant trouver la ligne qui pose problme ! Encore faut-il, une fois la ligne coupable trouve,
savoir le corriger
Cette priode de galre est rvolue, tous les navigateurs possdent une console derreurs et puis
cest sans compter sur notre fidle Firebug ! Il affiche des messages derreurs assez clairs en
indiquant gnralement lendroit exact o lerreur sest produite.
Mais on peut faire plus : pour dbugger du code dans Firebug, allez dans longlet Script et
activez-le. Vous pouvez choisir le script analyser et y insrer des breakpoints ou points darrts. Ils
64
servent faire une pause sur une ligne d'un code JavaScript et afficher l'tat complet des variables,
mthodes, objets, etc. La quantit d'informations disponible est tout simplement immense, vous
pouvez les retrouver dans le cadre de droite de Firebug ds qu'un point d'arrt est atteint. Vous
pouvez aussi passer dun point darrt un autre pour voir au ralenti lexcution de votre script.
Disons que vous avez un script o vous vous dites cet endroit-l, ya des chances que a plante
car vous faites un calcul complexe, ou faites une opration partir de donnes rentres par
lutilisateur. Au lieu de croiser les doigts pour que a narrive pas, vous pouvez mettre en place une
gestion derreurs.
La gestion derreurs se fait laide du bloc dinstruction try catch. Dans le try on va essayer le code,
et si une erreur (ou exception) survient, on passe dans le bloc catch, o lon va excuter une action
en cas derreur (affichage dun message, log de lerreur, ou autre)
Ce bloc dinstruction peut tre suivi de linstruction finally, o lon va excuter du code quoi quil se
passe, quil marche, ou quil plante. Mais vous allez rarement lutiliser.
Si vous voulez vous-mme dans votre code renvoyer une erreur (si un paramtre est incorrect par
exemple), vous pouvez le faire laide de linstruction throw.
La minification
Quand vous vous lancerez la recherche de librairies JavaScript, vous allez souvent voir une version
.js et une version .min.js du script. Que veut dire ce min ? Il signifie que cest une version du
script qui a t minifie : cela consiste retirer tous les espaces, les commentaires et les retours la
ligne inutiles du code.
Les intrts de la minification sont principalement de rduire la taille du fichier et donc dacclrer le
temps de chargement et accessoirement de rendre le code moins lisible pour le protger contre le
vol. Un code minifi est aussi plus difficile dbugger.
Prfrez donc un code non-minifi pour dvelopper et puis au-moment de mettre votre site en
ligne, changez les rfrences dans vos pages du script non-minifi vers le script minifi et mettez
la version minifie en ligne.
http://dean.edwards.name/packer/
http://jsbeautifier.org/
65
Plus dinformations
http://api.jquery.com/
jQuery Fundamentals
http://jqfundamentals.com/
http://coding.smashingmagazine.com/2012/05/31/50-jquery-function-demos-for-
aspiring-web-developers/
Sources
JavaScript & jQuery : the missing manual par David Sawyer McFarland
JavaScript sur Codecademy.com
Dynamisez vos sites web avec JavaScript ! sur le site du Zr0
66