Professional Documents
Culture Documents
dynamique avec
jQuery !
Par Nassoub
et Sainior
www.siteduzero.com
Sommaire
1/60
Sommaire
Sommaire ........................................................................................................................................... 1
Lire aussi ............................................................................................................................................ 1
Un site web dynamique avec jQuery ! ................................................................................................ 3
Partie 1 : Introduction jQuery ........................................................................................................... 5
jQuery : l'histoire d'un framework ! .................................................................................................................................... 5
Mais... c'est quoi jQuery ? ...........................................................................................................................................................................................
jQuery, un framework JavaScript ................................................................................................................................................................................
JavaScript ou... jQuery ? .............................................................................................................................................................................................
jQuery, un framework ou une librairie ? .......................................................................................................................................................................
A quoi va nous servir jQuery ? ....................................................................................................................................................................................
Les points forts de jQuery ...........................................................................................................................................................................................
L'histoire du framework ...............................................................................................................................................................................................
Des sites qui utilisent jQuery .......................................................................................................................................................................................
5
5
5
6
7
7
8
9
16
16
16
17
17
17
19
19
21
21
24
24
26
26
26
27
27
28
28
29
29
30
31
31
32
32
33
33
34
34
34
35
36
36
38
38
38
39
39
39
www.siteduzero.com
41
41
41
42
43
46
Sommaire
2/60
www.siteduzero.com
3/60
Par
Nassoub et
Sainior
jQuery est le framework JavaScript le plus utilis de tous : mme le Site du Zro en fait usage ! Complet, puissant, lgant...
beaucoup sont ses points forts, et rares sont ses points faibles. L'attrait pour cet outil est immense. Seulement voil : comment
se former cette technologie, en France, o la documentation de qualit se fait rare ? Comment aborder jQuery lorsque l'on
est dbutant ? C'est ces problmatiques que nous allons chercher rpondre ensemble par le biais de ce tutoriel. Si vous ne
savez pas ce qu'est jQuery ou ne savez pas ce qu'est un framework ou une librairie, ne fuyez pas ! Comme l'accoutume, nous
partirons de Zro.
Quelques prrequis nous semblent quand mme indispensables pour aborder ce cours dans les meilleures conditions.
Les prrequis pour suivre ce cours :
Matriser HTML. (mise niveau)
De bonnes bases en CSS. (mise niveau)
Des bases solides en JavaScript. (mise niveau)
Matriser un langage server-side comme PHP est un plus indniable. Cependant, cela ne sera ncessaire que lorsque
nous aborderons AJAX. (mise niveau PHP)
www.siteduzero.com
4/60
Les normes antrieures HTML5 et CSS3 peuvent tre utilises. Les codes donns au cours de ce tutoriel respecteront
nanmoins les dernires versions des deux standards.
www.siteduzero.com
5/60
Un logo de JavaScript
www.siteduzero.com
6/60
Euh... et c'est ce petit truc de rien du tout qui ncessite un cours entier ? Elle me parat pas franchement crdible toute
cette histoire...
Et pourtant !
jQuery n'est pas n'importe quel fichier JavaScript. C'est une norme bibliothque de fonctions JavaScript qui ont t crites et
regroupes en un seul et unique fichier pour plus de simplicit.
Vous tes intrigu par le contenu de ce fichier... et vous avez du mal croire qu'il peut lui seul tre l'objet d'autant
d'engouement. C'est normal. Cliquez plutt sur ce lien pour voir le code de jQuery dans sa version 1.7 . Plutt impressionnant
non ? Cela prend tout de suite une autre ampleur.
Ce qu'il faut vous dire, c'est que jQuery est vraiment une grosse bote outils, et pas "un petit fichier de rien du tout". Le nombre
de fonctions qui sont contenues dans ce simple fichier est vraiment grand. Et ces outils n'ont qu'un seul but : vous permettre
d'crire moins de code JavaScript, pour tre toujours plus productif et efficace dans vos dveloppements !
www.siteduzero.com
7/60
Il existe en fait une petite diffrence toute simple entre framework et librairie, et cette diffrence, nous nous proposons de vous
l'expliquer ds maintenant pour mieux comprendre l'impact que jQuery va avoir sur votre manire de coder.
Vous voulez un peu savoir ce que ce framework a dans le ventre ? Trs bien ! Voyons maintenant quoi peut (et va !) nous servir
jQuery concrtement dans notre site web.
jQuery et la compatibilit
Concrtement, la compatibilit inter-navigateurs signifie qu'un code JavaScript qui fonctionne sur un
navigateur web peut ne pas fonctionner sur un autre. Et bien devinez quoi ? jQuery uniformise le
tout ! Au final, un code JavaScript respectant les normes imposes par jQuery sera compatible sur
tous les navigateurs web.
Un gain de temps et d'nergie plus quapprciable, vous permettant de vous focaliser vraiment sur le
cur de votre code, plutt que sur des questions de compatibilit entre navigateurs.
www.siteduzero.com
8/60
jQuery et l'AJAX
Dans le mme registre de compatibilit, l'AJAX avec jQuery a t grandement simplifi.
AJAX est rendu possible grce un objet de JavaScript appel XmlHttpRequest
(XHR)... seulement, instancier un objet XmlHttpRequest peut vite devenir un vritable
calvaire, car d'un navigateur l'autre, cela ne se fait pas du tout de la mme manire.
Grce jQuery, instancier un objet XHR est trs simple.
Une seule fonction instancie l'objet, et elle couvre tous les navigateurs, en plus de
vous fournir des outils pour grer au mieux votre requte ! AJAX devient donc
tonnamment facile et rapide utiliser.
Attention nanmoins : jQuery ne remplace en aucun cas un traitement ct serveur. Ce framework reste une technologie
ct client, on peut donc facilement contourner ces validations, voir mme les dsactiver.
Ainsi, ne comptez pas QUE sur jQuery pour valider vos donnes. Vous devrez galement prvoir une validation ct serveur,
avec un langage tel que PHP.
Et tout cela, c'est sans parler de toutes la panoplie d'outils disponible pour manipuler pleinement le DOM que jQuery vous offre.
Pas de doutes, jQuery est le choix pour lequel vous devez opter aujourd'hui pour donner une nouvelle dimension vos futurs
sites.
Nous ne pouvons que vous encourager vous accrocher et apprendre cette technologie. Avec ce tuto entre les mains, ce
travail d'apprentissage n'en sera que plus facile.
L'histoire du framework
Le framework jQuery est la base l'oeuvre d'un seul homme, un
www.siteduzero.com
9/60
Le framework jQuery est la base l'oeuvre d'un seul homme, un
programmeur JavaScript hors-pair qui a su, en 2006, initier le projet.
Son nom est John Resig. Depuis 2006, John Resig est rest le chef de projet
de jQuery. C'est ainsi lui qui suppervise encore aujourd'hui le
dveloppement de jQuery.
Il fut dans le pass dveloppeur pour le compte de la Mozilla Corporation,
o il travaillait en tant que dveloppeur JavaScript.
Malgr le travail colossal que Resig a su faire sur le framework jQuery, vous
imaginez bien que cet homme n'a pas pu lui seul crer un tel outil. Les
autres dveloppeurs de jQuery, ce sont les membres de sa communaut.
En effet ! John Resig a publi le framework sous licence MIT et GNU GPL :
deux licences libres. Cela signifie concrtement que tout le monde peut
travailler sur le framework et participer son amlioration. Vous verrez
notamment plus tard qu'il existe des plug-ins jQuery que vous pourrez crer
vous-mme, afin de toujours plus complter le framework... mais nous n'en sommes encore pas l.
A ce jour, jQuery en est sa version 1.7.2, et a dj subi beaucoup de mises jour. La communaut est en effet trs active, et les
mises jour sont font toujours rgulirement.
www.siteduzero.com
10/60
Nom
Internet
Explorer
OS Tlchargement
Fourni par
dfaut avec
Windows.
Dscription
Un navigateur web sign Microsoft et intgr par dfaut toutes les versions du
systme d'exploitation Windows. Si vous tournez actuellement sous Windows,
alors vous disposez de ce navigateur.
Je ne vous recommande pas d'utiliser ce navigateur, car les versions les plus
rcentes ne sont pas disponibles pour les systmes comme Windows XP qui
sont pourtant massivement utilises encore aujourd'hui.
Il y a donc une grosse probabilit que votre version d'Internet Explorer ne soit
pas capable de reconnatre les dernires avances technologiques en matire de
standards web.
Mozilla
Firefox
Tlchargement
Google
Chrome
Un autre navigateur web sign cette fois-ci par Google. Le programme est bas
sur un projet open-source baptis Chromium, mais connat quelques
Tlchargement
controverses vis vis du respect des informations personnelles de ses
utilisateurs. Il est nanmoins recommand de l'utiliser tant il est performant.
Chromium
Chromium est le projet open-source sur lequel est bas Google Chrome. Il s'agit
en fait de Google Chrome lav de tous les ajouts de Google. Vous pouvez l'utiliser
Tlchargement
si vous tes inquiet au sujet des questions du respect des informations
personnelles.
Opera
Opera est un navigateur web de trs grande qualit propos gratuitement par
Tlchargement l'entreprise Opera Software.
Il est moins utilis que les 4 prcdents mais demeure un excellent produit.
Safari
Tlchargement
Safari est le navigateur web d'Apple qui quipe tous les ordinateurs Apple par
dfaut. C'est un peu l'Internet Explorer de la pomme de ce point de vue.
Sachez que jQuery est totalement compatible avec tous ces navigateurs. Vous n'avez pas vous inquiter de ce ct-l.
www.siteduzero.com
11/60
Maintenant que nous vous avons prsent ces navigateurs majeurs que tout le monde utilise sur le web, nous pouvons quand
mme souligner qu'il y en a un qui ressort nettement plus que les autres. Ce navigateur, c'est Mozilla Firefox !
Et... pourquoi cela ?
Simplement parce que Firefox est vraiment le meilleur de tous les navigateurs lorsqu'il s'agit de dvelopper pour le web. Nous
souhaiterions vous faire dcouvrir (ou redcouvrir) un outil spcialement ddi au dveloppement web, et surtout uniquement
disponible sous Mozilla Firefox.
Cet outil, nomm Firebug vous sera vraiment d'une aide capitale dans vos futurs dveloppement web, en particulier avec
JavaScript et jQuery.
www.siteduzero.com
12/60
Mine de rien, ces outils vont nous tre sacrment utiles pour dvelopper en jQuery. Pour la suite : sachez qu'il existe 3 autres
onglets : Script, DOM et rseau, mais que nous ne souhaitons pas dvelopper dans cette partie du cours sur jQuery. Si vous
souhaitez avoir plus d'informations sur Firebug dans son ensemble, nous pouvons vous conseiller de lire cet excellent tutoriel
sur l'extension Firebug disponible sur le Site du Zro.
www.siteduzero.com
13/60
Il est galement savoir que Google Chrome propose en natif des outils de dveloppement assez proches de Firebug,
ils s'ouvrent de la mme manire, en appuyant sur la touche F12.
Notre prfrence personnelle va quand mme Firebug, nanmoins, la qualit de ces outils est certaine, et ils pourraient
vous convenir parfaitement si vous tes un grand fan de Google Chrome/Chromium.
Sous Windows
Sous Linux
www.siteduzero.com
14/60
Sous MacOS X
www.siteduzero.com
15/60
Le chapitre qui suit sera le dernier chapitre introductif au cours. Nous allons faire une dernire petite mise au point... cette fois-ci
au niveau du JavaScript. Vous remettre en mmoire une dernire fois les fondements de ce langage ne sera pas de trop avant
d'apprendre jQuery !
Si vous estimez que le chapitre suivant ne vous sera pas utile, vous tes totalement libre de le sauter. Il est nanmoins
recommand de le lire. Cela ne vous prendra que peu de temps, et ce ne sera que positif pour vous.
www.siteduzero.com
16/60
Il est vident qu'il ne faut pas placer son code JavaScript en plein milieu de la page, c'est totalement illogique et vous
pouvez vous perdre plus facilement si votre script fait beaucoup de lignes !
www.siteduzero.com
17/60
de flocons de neige sur la page d'accueil prsente trs peu d'intrt, et aura plutt tendance agacer l'utilisateur.
De mme,
ne chargez pas vos informations essentielles avec ce langage : les personnes l'ayant dsactiv, les personnes handicapes et les
robots des moteurs de recherche ne pourront ou ne saurront pas lire votre contenu !
JavaScript doit donc tre sur un site web pour, par exemple, amliorer l'exprience utilisateur, mais surtout pas pour la cration de
contenu.
Variables et fonctions
Parmis les bonnes pratiques adopter en JavaScript, il y a celles qui concernent les variables et les fonctions. Nous ne vous
parlerons que de ces lments pour la simple et bonne raison que leur dclaration ne change pas avec jQuery, contrairement aux
vnements, par exemple. Si vous ne savez pas ce qu'est une variable ou une fonction, nous vous conseillons vivement d'aller
lire un tutoriel consacr JavaScript !
Traditionnellement, on dclarera nos variables en dbut de code ; ce n'est pas le langage qui veut cela, c'est juste une faon d'y
voir plus clair.
Concernant les tableaux, plus couramment appels arrays, et les objets, ils se dclarent grce leur structure particulire. Ainsi,
on initialisera un tableau avec des crochets [ ], et un objet avec des accolades { }.
Fonctions et arguments
Les fonctions en JavaScript se dclarent de la mme manire qu'en PHP, par exemple. Beaucoup de langages de programmation
se ressemblent, surtout ce niveau. Ainsi, il suffit d'crire le mot-cl function suivi du nom de la fonction pour dclarer celleci et pouvoir l'utiliser. Elle peut aussi prendre des arguments, qui feront office de variables accessibles uniquement dans la
fonction qui les a instanci. Il est donc possible d'exploiter des donnes diffrentes avec une seule fonction.
Code : JavaScript
function helloWorld(nom){
alert('Hello World, ' + nom + '!');
}
helloWorld('Sainior'); // affichera une alerte "Hello World Sainior
!"
www.siteduzero.com
18/60
Encore une fois, jQuery est presque un nouveau langage apprendre. Ainsi, nous ne serons pas aussi rapides dans
nos explications dans les prochains chapitres. Ici, nous souhaitons juste vous rafrachir la mmoire.
Vous tes maintenant au point pour commencer vous lancer avec jQuery ! Ces chapitres d'introduction ont peut-tre t un peu
long, mais nous pensons qu'il est ncessaire que vous soyez sr de vous pour coder dans de bonnes conditions. Alors
n'attendez plus, on commence ds maintenant !
www.siteduzero.com
19/60
Pour rcuprer jQuery, vous devez tout simplement cliquer sur l'option "Download" dans le menu du haut. Vous arriverez alors
sur une page vous prsentant les diffrentes release de jQuery. A l'heure o nous crivons ces lignes, la version actuelle est la
1.7.2, et c'est celle que nous utiliserons au sein de ce cours.
Quoiqu'il en soit, la version la plus jour est place un peu en avant par rapport aux autres ; pratique pour l'identifier et la
rcuprer plus rapidement.
Euh... il y a deux release pour la mme version non ? Une version "Minified" et une version "Uncompressed"... qu'estce que je dois choisir ?
www.siteduzero.com
20/60
jQuery Minified
jQuery Minified est le framework jQuery "compress". En effet, vous avez pu vous rendre compte : jQuery est un fichier
qui est vraiment immense, et dans ce fichier immense vous pouvez voir qu'il y a beaucoup d'espaces et beaucoup de
retours la ligne : pour garder un peu de lisibilit pour les codeurs. Le problme, c'est qu'en faisant a, le fichier
prend vraiment plus de place. La version Minified rpond ce problme : tous les espaces et retours la ligne sont
retirs. Cela a pour effet de rendre le code compltement illisible, mais en revanche, jQuery sera tlcharg plus vite
par vous et vos visiteurs !
jQuery Uncompressed
jQuery Uncompressed est "l'autre jQuery". Celui qui a conserv les espaces et les retour la ligne pour garder de la
lisibilit, mais qui est plus long charger.
Bien sr, nous vous recommandons vivement d'utiliser la version compresse sur votre site en production, car elle sera
vraiment plus rapide charge. En revanche, pour toute la phase de dveloppement il sera plus sage d'utiliser la
version dcompresse.
Bref, pour en revenir notre inclusion dans nos pages, tlchargeons la version compresse de jQuery. Faites donc un Clic Droit
-> Enregistrer sous, et placez jQuery dans un dossier facile d'accs pour pouvoir l'inclure plus facilement dans votre page web.
La suite est trs simple et trs basique. Ouvrons un document HTML.
Code : HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Test jQuery</title>
</head>
<body>
<p>On va bosser avec jQuery, c'est super !</p>
<script src="chemin/vers/jquery.js"></script>
</body>
</html>
Et voil ! Si le chemin d'accs vers le fichier est correct, jQuery a bien t reli votre page web... seulement, cette mthode n'est
franchement pas recommand, car elle va faire bosser votre serveur un peu plus, et surtout inutilement.
On va voir tout de suite la deuxime mthode, celle qui est vraiment beaucoup plus recommande par tous les dveloppeurs
jQuery !
www.siteduzero.com
21/60
Code : HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Test jQuery</title>
</head>
<body>
<p>On va bosser avec jQuery, c'est super !</p>
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
</body>
</html>
La rponse cette question est trs simple : c'est juste pour moins faire travailler notre serveur. En plus de cela, inclure jQuery
depuis un serveur Google permet une mise en cache immdiate, pour toujours acclrer les temps de chargement de votre site.
C'est donc plus une question de performance qu'autre chose.
Ainsi, pensez bien qu' chaque fois que vous travaillerez en jQuery, il vous faudra inclure le framework depuis un serveur Google
!
www.siteduzero.com
22/60
<title>Test jQuery</title>
</head>
<body>
<p>On va bosser avec jQuery, c'est super !</p>
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<!-- jQuery est inclus ! -->
<script>
jQuery(document).ready(function(){
// Du code en jQuery va pouvoir tre tap ici !
});
</script>
</body>
</html>
Nous incluons jQuery min. ici, nous considrons simplement que cette page est en production. Si elle avait t une
page en dveloppement, nous y aurions inclus la version non compresse de jQuery.
Oulah, il y a dj pas mal d'infos dans ce code que nous allons devoir vous expliquer.
Laissons un peu tomber le HTML pour le moment et focalisons-nous sur le JavaScript. Essayez simplement d'imaginer que nous
nous trouvons dans une page HTML complte.
Code : JavaScript
jQuery(document).ready(function(){
// Du code en jQuery va pouvoir tre tap ici !
});
Alors, comme nous vous le disions, on a dj pas mal de nouveauts dans ce code : la ligne 1 en contient le plus.
Code : JavaScript
jQuery(document)
jQuery prend un argument. Ici, elle cible le "document", qui reprsente tout simplement votre document HTML sur lequel vous
travaillez : votre page web.
Code : JavaScript
jQuery(document).ready(function(){
// notre code ici
});
La suite de ce code est vraiment trs simple. Vous voyez que le prochain lment qui arrive, est l'vnement ready. Cet
vnement se traduit simplement par "est prt". Une fois que cet vnement est vrifi, on lance une fonction anonyme dans
laquelle on va place notre jQuery.
Ainsi, cette ligne peut tre traduite par : "Quand le document HTML est prt (sous-entendu, est charg) lance une fonction qui
contient le code jQuery."
www.siteduzero.com
23/60
Cette petite structure de rien du tout signifie vraiment beaucoup de choses : on attend simplement que la page HTML soit
charge avant de commencer parler de jQuery. C'est LA structure que vous devrez utiliser dans 99% des cas pour coder en
jQuery dans votre page. Retenez la par coeur, parce que cela vous fera vraiment gagner du temps.
Et comment on peut vrifier que tout cela est fonctionnel ?
Vous pouvez simplement ajouter un console.log la place des commentaires dans le code ci-dessus pour voir si vous recevez
bien quelque chose dans votre console Firebug l'excution de ce code. Vous pouvez galement utiliser la mthode hard en
utilisant carrment un alert().
Vous pouvez vous y prendre comme ceci :
Code : JavaScript
/*
* Avec un console.log
*/
jQuery(document).ready(function(){
console.log("jQuery est prt !");
});
/*
* Avec un alert()
*/
jQuery(document).ready(function(){
alert("jQuery est prt !");
});
Si vous avez un retour dans votre console ou dans votre navigateur, c'est tout bon !
Quoiqu'il en soit n'oubliez pas cette structure.
et
Code : JavaScript
$(document).ready(function(){
alert('Salut, jQuery est oprationnel !');
});
www.siteduzero.com
24/60
viter le conflit
La plupart des bibliothques JavaScript utilisent elles aussi le $ (dollar), ce qui peut tre la source de conflit entre les diffrentes
librairies sur une mme page. Pour viter ce genre de problme, il est possible de passer la variable jQuery une fonction
anonyme pour tre sr que notre alias ne soit pas l'origine de conflits.
Code : JavaScript
(function($){
// notre code ici
})(jQuery);
Le principe de fonctionnement
Comme nous venons de le voir, le framework met en place une fonction dite principale. Le principe de fonctionnement de jQuery
repose en fait entirement sur celle-ci ! Autant dire que vous allez vous servir beaucoup plus du caractre $ (dollar) ds prsent
!
Ainsi, pour agir avec les lments d'une page web, on ralisera ce qu'on appelle couramment un ciblage d'lment , qui
reprsentera une balise, par exemple. On agira ensuite dessus grce des mthodes. Pour que vous ayez un aperu, voici un
code fictif tout simple usant du principe de jQuery :
Code : JavaScript
$('monElement').maMethode();
Je cible dans un premier temps mon lment qui jouera le rle d'objet, grce un slecteur (chose que nous verrons plus en
dtails dans le prochain chapitre). Je peux ensuite agir dessus grce une mthode !
www.siteduzero.com
25/60
Une mthode en jQuery est une fonction un peu spciale qui agira directement sur l'objet (ou l'lment cibl, si vous prfrez)
indiqu. Le framework en possde beaucoup, mais il est possible de crer les notres ! Nous verrons cela dans un chapitre ddi,
lorsque vous serez plus l'aise avec jQuery.
Il est possible de chaner les mthodes, c'est--dire que l'on peut en mettre plusieurs la suite, pour agir sur l'objet en une seule
fois.
Code : JavaScript
$('monElement').premiereMethode().deuxiemeMethode();
/* la premire mthode agit d'abord sur l'objet, avant la deuxime.
On a donc un ordre logique : les mthodes s'enclenchent les unes
derrire les autres */
Si vous avez assimil ce fonctionnement de base, vous avez fait le plus dur.
Bien sr, jQuery est bourr d'outils pour rendre la chose un peu plus vivante.
Vous devez commencer comprendre comment fonctionne concrtement le framework !
allons monter le niveau d'un cran, et voir les slecteurs dans le chapitre suivant.
www.siteduzero.com
26/60
Les slecteurs
jQuery a une syntaxe qui permet de slectionner trs facilement des lments sur la page, c'est un de ses plus grands points
forts. Mais, au-del des apparences, la slection de ceux-ci est plus complexe qu'il n'y parat. Les slecteurs en jQuery sont
toute une science que nous allons apprendre pas pas au cours de ce chapitre !
Un identifiant est unique : plusieurs lments d'une seule page ne peuvent pas avoir le mme id !
Frres et parents
Parmis les slecteurs un peu plus complexes que les classes et les identifiants se trouvent les slecteurs de descendance. Ce mot
bizarrement employ dans un contexte tel que le notre cache en fait un concept trs puissant de parcours. Vous n'tes surement
pas sans savoir qu'il est possible, en HTML, d'imbriquer des balises les unes dans les autres. Eh bien, ce systme fait usage de la
descendance !
Prenons un exemple concret. Je possde un paragraphe, dans lequel j'ai un lien absolu. Ma balise <a href="lien"></a>
est alors imbrique dans les balises <p></p> propres au paragraphe.
www.siteduzero.com
27/60
Le problme de cette mthode-ci est qu'elle prend en compte tous les lments possdant la bonne classe et contenus dans un
parent. Imaginez que vous ne vouliez slectionner que les lments qui descendent directement du bloc parent, c'est--dire qui
ne sont pas contenus une seconde fois dans un autre bloc. Dans ce cas-l, il vous faudra utiliser un slecteur un peu moins
connu, qui n'est autre que >.
Code : JavaScript
$('p > .lien');
/* ici, nous slectionnons seulement les lments ayant la classe
.lien,
et descendants directement du paragraphe ! */
Il est ensuite possible de pousser le systme encore plus loin, par exemple en utilisant les slecteurs + et ~ qui se chargent de
reprsenter les frres de l'lment. Ce qu'on appelle couramment les frres, dans ce contexte de jQuery, ce sont simplement les
lments qui se suivent directement, comme par exemple deux liens.
Code : JavaScript
$('.lien + .visite');
/* la slection s'effectue sur les lments ayant pour classe
.visite,
et qui sont immdiatement prcds d'un lment ayant pour classe
.lien */
$('.lien ~ .visite');
/* dans ce cas-l, ce sont tous les lments .visite,
prcds immdiatement ou non par un lment .lien */
www.siteduzero.com
28/60
Si au contraire vous voulez cibler tous les autres lments, ceux qui n'ont pas la bonne valeur dans leur attribut, il suffit de
rajouter un point d'exclamation (!) devant le signe "gal" (=) :
Code : JavaScript
$('input[name!=pseudo]'); // retourne les lments n'ayant pas
pseudo pour nom
Le slecteur :not()
Un peu part, ce slecteur particulier permet de cibler les lments qui sont tout sauf ce qui a t indiqu l'intrieur. Il permet
donc une slection puissante, et, depuis jQuery 1.3, permet mme de spcifier plusieurs types de balises en mme temps ! Il
s'utilise trs facilement :
www.siteduzero.com
29/60
Code : JavaScript
$('p:not(.rouge)'); // slection de tous les paragraphes, sauf ceux
ayant .rouge comme classe
$('input:not(.bleu, .vert)'); // on slectionne tous les lments de
formulaire sauf ceux ayant .bleu et/ou .vert comme classe
Autant dire qu'en terme de praticit, ce slecteur vaut pas mal de points !
Sauver la slection
Il peut parfois se rvler pratique de sauvegarder un objet jQuery. Il est donc possible de rentrer une slection dans une variable,
cette dernire pouvant tre utilise la place de la fonction principale.
Code : JavaScript
var $element = $('monElement');
Par soucis de lisibilit et de comprhension, on fait prcder le nom de notre variable du caractre $. On sait ainsi
directement qu'on a affaire un objet jQuery.
Ce code fonctionne parfaitement, mais ce n'est pas la meilleure faon de procder ! Il y a plus simple, plus rapide et surtout plus
propre. Pour respecter cela, il faut indiquer le type, prcd de deux points :
Code : JavaScript
$('input:button'); // on slectionne un input de type button
Code
input:text
input:file
www.siteduzero.com
30/60
input:radio
input:button
input:submit
Le slecteur $(this)
Le slecteur le plus spcial est sans aucun doute $(this). Dans la plupart des langages orients objet, le mot-cl this
reprsente l'objet courant, celui qui est actuellement trait par une fonction, par exemple. jQuery permet la slection de cet objet.
Exemple avec ce code qui traite chaque lment trouv :
Code : JavaScript
$('p').each(function(){
$(this).html('Hello World !'); // $(this) reprsente le
paragraphe courant
});
C'est la fin de ce chapitre ! Vous avez vu que les slecteurs de jQuery offrent de nombreuses possibilits de ciblages des
lments d'une page web, et ce n'est que le dbut de ce fabuleux framework ! Vous verrez dans le prochain chapitre comment
grer les vnements, o vous aurez besoin de mettre en pratique tout ce que vous venez de voir. Assurez-vous donc de bien
avoir compris !
www.siteduzero.com
31/60
C'est la fonction de base de jQuery, vous vous souvenez ? Elle marche autour de l'vnement ready() qui coute le
chargement du document. L'coute d'un vnement, c'est tout simplement le fait d'attacher une action bien prcise remplir un
lment pour dclencher une fonction, appele couteur d'vnement.
"QUAND le document est PRT , on appelle une fonction dans laquelle on va mettre du
jQuery."
C'est le fonctionnement de ce code qui tourne autour de l'vnement ready() : tant que le document n'est pas charg, on ne
fait rien. Quand il est charg, on agit. Fort heureusement pour nous, jQuery peut couter plein d'vnements diffrents, on ne se
limitera pas qu' couter si notre page est charge ou non.
On aura par exemple un vnement qui pourra couter la souris de l'utilisateur : quand il va cliquer sur un certain lment
de votre page que vous aurez cibl avec un slecteur, vous pourrez excuter du code jQuery.
Un autre vnement peut couter le clavier de l'utilisateur : quand il va presser des touches de son clavier, vous pourrez
excuter l encore du code.
En gros, on peut dire qu'un vnement fait le lien entre une action remplie, et une fonction (du code) excute.
Encore une fois, si vous tes un habitu du JavaScript vous deviez connatre un peu tout a, si ce n'tait pas le cas, pas de
problme : maintenant vous connaissez le concept. JavaScript permettait de grer les vnements d'une certaine manire. Eh bien
devinez quoi ? En jQuery, c'est totalement diffrent ! Bon point : en JavaScript, grer des vnements ne se faisait pas du tout de
la mme manire d'un navigateur l'autre. Sachez que jQuery uniformise encore le tout !
La syntaxe en elle-mme est super simple, voyons ce que cela donne ici. Utilisons par exemple l'vnement click() qui est un
vnement coutant le clic de la souris.
Code : JavaScript
www.siteduzero.com
32/60
$("#uneDiv").click(function(){
// Le code a excuter !
});
Si on clique sur l'lment qui possde l'id #uneDiv (<div id="uneDiv"></div>), alors vous allez pouvoir dclencher du
code JavaScript. Plus tard, lorsque l'on sera un peu plus l'aise avec jQuery, on pourra par exemple dcider de faire disparatre
cette div (ou un autre lment !) avec un bel effet, ou mme commencer grer une requte AJAX pour mettre jour le contenu
de cette div... bref ! Les possibilits sont multiples.
Les vnements vous intressent et vous voulez aller plus loin, alors lisez donc la suite.
Dclenchement d'vnements
Parmis les nombreux vnements disponibles, les plus clbres sont sans aucun doute ceux pouvant tre dclenchs par
l'utilisateur. Ce sont eux qui permettent une trs grande interactivit avec le visiteur, c'est donc eux qui seront les plus utiliss en
gnral. Nous allons en voir quelques uns, ceux qui sont connatre absolument !
Fonction
Clic
click()
Double-clic
dblclick()
Passage de la souris
hover()
mouseenter()
Quitter un lment
mouseleave()
mousedown()
scroll()
www.siteduzero.com
33/60
Code : JavaScript
$(document).keyup(function(touche){ // on coute l'vnement keyup()
var appui = touche.which || touche.keyCode; // le code est
compatible tous navigateurs grce ces deux proprits
if(appui == 13){ // si le code de la touche est gal 13
(Entre)
alert('Vous venez d\'appuyer sur la touche Entre !'); // on
affiche une alerte
}
});
Pour connatre le code d'une touche, je vous invite aller consulter cette page.
Fonction
focus()
change()
Envoi du formulaire
submit()
Le dclenchement virtuel
jQuery permet de simuler le dclenchement d'vnements grce une simple mthode. Pour faire court, vous n'avez pas besoin
d'attendre que l'utilisateur remplisse une action prcise pour lancer du code : vous pouvez excuter virtuellement un vnement
grce trigger() ! Il suffit de donner le type de l'vnement en tant qu'argument.
Code : JavaScript
$('p').click(function(){
alert('Cliqu !');
});
$('p').trigger('click'); // dclenche l'action au chargement du
script
www.siteduzero.com
34/60
Rappels
Si vous lisez ce cours, c'est que vous avez quand mme quelques notions en JavaScript. Dans un premier temps, rappelez-vous
la mthode que vous utilisiez pour couter un vnement. Il devait sans doute s'agir de addEventListener(), qui signifie
en franais ajouter un couteur d'vnement . Cette fonction prenait le plus souvent deux arguments : le premier indiquait le
type d'vnement couter, le second tait une fonction de retour excutant du code.
Un troisime paramtre pouvait tre dfini true ou false, et permettait d'utiliser soit la phase de capture, soit la phase de
bouillonnement.
L'coute en jQuery
Sachez qu'avec notre framework, il est possible de raliser la mme chose. L'coute d'un vnement se ralisera avec la mthode
bind() le plus souvent, mais la tendance s'inverse pour laisser place la fonction on(), recommande par les auteurs de
jQuery depuis la version 1.7 : c'est donc trs rcent. Comme chaque dveloppeur doit s'adapter au progrs, nous utiliserons la
seconde mthode dans la suite de ce chapitre, et plus gnralement de ce cours !
Quelle diffrence entre ces deux fonctions ? Pourquoi utiliser l'une, et plus l'autre ?
On note une diffrence majeure de flexibilit : nous allons voir juste aprs qu'il est possible de dlguer des vnements, de faire
vivre des vnements, et videmment d'couter des vnements. Dans les versions plus anciennes de jQuery, il fallait utiliser
trois mthodes diffrentes pour raliser ces choses-l. La mthode on() permet de les regrouper en une seule, elle est donc bien
plus pratique et ergonomique !
Prcdemment, vous avez vu comment dclencher un vnement simple. Les fonctions utilises n'taient en fait que des
mthodes simplifies, permettant aux dveloppeurs de ne pas crer chaque fois un gestionnaire. Nous allons voir prsent
l'coute, la vraie, d'vnements en jQuery.
Rappel : nous utilisons la mthode on().
Pour couter un vnement, il suffit de raliser le mme schma de code qu'avec addEventListener(). C'est--dire que l'on
va donner dans un premier temps le type d'vnement, puis la fonction de callback excuter :
Code : JavaScript
$('button').on('click', function(){
alert('Ce code fonctionne !');
});
on cible un bouton ;
on initialise un gestionnaire d'vnement ;
on coute le clic de l'utilisateur ;
et on excute le code de la fonction de retour.
Un des avantages de cette technique est que l'coute peut se faire sur plusieurs vnements en mme temps, vous n'tes pas
oblig de crer un gestionnaire pour chacun d'eux ! Ainsi, nous pouvons lancer une coute sur le clic et sur le double-clic, en
sparant les deux types par un espace :
Code : JavaScript
www.siteduzero.com
35/60
La dlgation d'vnements
Ce concept est plutt simple comprendre. Il permet en fait de crer un couteur d'vnements sur un lment, et de s'adapter
automatiquement aux lments similaires crs plus tard, de faon dynamique ! Pour que vous compreniez bien, imaginons que
vous ayez un paragraphe simple, sur lequel vous appliquez un vnement. Si vous crez d'autres paragraphes dans la page,
ceux-ci ne seront pas pris en compte par l'couteur !
Avant la version 1.7 du framework, il tait trs courant (et a l'est encore ajourd'hui) d'utiliser la mthode live(), pour dlguer
un vnement un lment cr dynamiquement. C'est une technique dprcie, pour la simple et bonne raison qu'elle devient
lente sur de grosses pages, et les problmes de performance sont trs mal vus des dveloppeurs. De mme, cette mthode
parcoure l'ensemble du document, contrairement on(), qui cible directement un lment ! On a donc une porte restreinte
pour une efficacit croissante : double gain de vitesse d'excution !
La fonction delegate() est presque autant utilise que live(). La diffrence entre ces mthodes est que la premire
fonctionne presque comme on(), et est donc plus propre et ergonomique. Elle n'est pas dprcie, contrairement sa cousine,
mais encore une fois, vous n'aurez pas l'utiliser.
La syntaxe pour dlguer un vnement est trs simple. Il faut donner trois arguments :
www.siteduzero.com
36/60
le type d'vnement ;
l'lment sur lequel on veut faire une dlgation ;
et la fonction de retour.
Code : JavaScript
$('body').delegate('click', 'p', function(){
alert('Les paragraphes crs peuvent tre cliqus !');
});
event.namespace
event dsigne le type d'vnement qui doit subir un espace de nom.
Le point permet de faire la jonction avec l'espace de nom.
namespace dsigne le nom.
Grce un systme pareil, vous pourrez excuter diffrentes fonctions partir d'un mme type d'vnement. Il suffit de spcifier
l'espace de nom utiliser, et seule la fonction correspondante sera excute.
Code : JavaScript
$('button').on('click.nom', function(){
alert('Premier vnement');
});
$('button').on('click.prenom', function(){
alert('Second vnement');
});
$('button').trigger('click.nom'); // excute le clic, MAIS ne lance
que la premire alerte !
Quatre rgles doivent tre respectes lorsque vous utilisez les espaces de noms. Il ne faut pas en user n'importe comment, car ils
ne sont pas adapts chaque cas d'utilisation :
1.
il est possible de donner plusieurs espaces de noms un vnement ;
en revanche, il n'est pas possible d'appeler plusieurs espaces de noms d'un seul coup !
Exemple : on('click.nom.prenom', ...) dfinira en mme temps click.nom et click.prenom ;
mais trigger('click.nom.prenom') ne marchera pas.
2.
vous pouvez seulement prciser le type d'vnement, sans les espaces de noms, pour tous les dclencher en
mme temps ;
en revanche, il n'est pas possible de ne prciser qu'un espace de nom sans type d'vnement !
Exemple : trigger('click') dclenchera toutes les fonctions associes aux espaces de noms sur le clic ;
mais trigger('.nom') ne marchera pas.
La suppression en jQuery
www.siteduzero.com
37/60
S'il est possible d'couter un vnement avec on(), il doit tre galement possible de le supprimer ! Et en effet, la fonction
inverse cette mthode se nomme, de manire plutt logique, off(). Elle est assez puissante dans le sens o elle peut
supprimer tous les gestionnaires et couteurs mis en place prcdemment avec on(), de mme qu'on utilisait unbind() pour
annuler bind() ! Fort heureusement, ce n'est pas sa seule utilisation : un argument permet notamment de spcifier quel type
d'vnement il faut annuler.
Code : JavaScript
$('p').on('click', function(){
// du code ici
});
$('p').off('click'); // supprime tous les gestionnaires coutant le
clic
$('p').off(); // supprimer tous les gestionnaires de n'importe quel
vnement
Annuler la dlgation
La fonction inverse de live(), avant de passer off(), se nommait die(). De mme que pour sa soeur, cette mthode est
dprcie, on peut donc dire qu'il est temps pour die() de mourrir !
Si vous voulez supprimer tous les gestionnaires d'vnements dlgus seulement, il faut donner un second argument la
mthode, qui est l'lment cr dynamiquement. La valeur ** dsigne tous les lments qui profitent de la dlgation
d'vnements :
Code : JavaScript
$('body').on('click', 'p', function(){
// du code ici
});
$('body').off('click', 'p'); // supprime tous les gestionnaires
d'vnements dlgus sur les paragraphes
$('body').off('click', '**'); // supprime tous les gestionnaires
d'vnements dlgus
Vous avez vu, les vnements n'taient pas difficiles comprendre, et en plus de a, c'est plutt simple d'en exploiter toute la
puissance dans notre code jQuery. Peut-tre les gestionnaires vous ont-ils donn du fil retordre ? Si c'est le cas, prenez bien le
temps de relire cette petite partie, car ils sont trs utiliss !
Les bases du framework se mettent de plus en plus en place dans votre tte, et c'est une trs bonne chance. Bientt vous serez
tonnez de ce qu'il est possible de faire avec votre site web ! La prochaine tape : la manipulation de votre code CSS. Modifier
des lments de votre design dynamiquement, un rve inavou ?
www.siteduzero.com
38/60
Il est galement possible de dfinir plusieurs proprits CSS en mme temps, grce un objet JavaScript que l'on passera en tant
qu'argument. Il suffira de sparer les diffrents attributs par une virgule :
Code : JavaScript
$('p').css({
color : 'red', // couleur rouge
width : '300px', // largeur de 300px
height : '200px' // hauteur de 200px
});
Une chose est retenir pour cette troisime faon de faire : il ne faut pas oublier que les tirets ne sont pas accepts dans les
identifiants d'un objet ! Pour parer ce problme, il vous faut soit mettre la premire lettre de chaque mot en majuscule, sans
sparer ceux-ci, soit mettre le nom de la proprit entre guillemets ou apostrophes :
Code : JavaScript
$('p').css({
borderColor : 'red', // bordure rouge
paddingRight : '30px', // marge intrieure de 30px
'margin-left' : '10px' // marge extrieure de 10px
});
www.siteduzero.com
39/60
La proprit float doit tre mise entre guillemets ou apostrophes, car c'est un mot-cl en JavaScript ! Il risque donc
d'y avoir un conflit si vous ne le faites pas.
Chaque mthode transforme l'objet donn (l'lment de la page web), et lui dfinit automatiquement une position absolue ou
relative.
www.siteduzero.com
40/60
Pour cela, il faut passer la valeur true aux mthodes outerHeight() et outerWidth().
Code : JavaScript
$('p').height(); // retourne la hauteur stricte du paragraphe
$('p').innerWidth(); // retourne la largeur (avec marges
intrieures) du paragraphe
$('p').outerWidth(); // retourne la largeur (avec marges intrieures
+ bordures) du paragraphe
$('p').outerHeight(true); // retourne la hauteur (avec marges
intrieures + bordures + marges extrieures) du paragraphe
Le style CSS d'une page web est facilement modifiable, et il est possible de raliser d'excellentes choses si on couple ce systme
avec les vnements. Si vous n'avez pas tout fait compris le chapitre, nous vous invitons le relire, car c'est une part
importante de jQuery.
Le prochain chapitre sera sous forme de TP : vous allez enfin pouvoir mettre en pratique vos nouvelles connaissances !
www.siteduzero.com
41/60
TP : le formulaire interactif
Bienvenue dans votre premier Travail Pratique !
Cela va tre l'occasion pour vous de mettre en pratique tout ce que vous venez d'apprendre travers les chapitres de cette partie
sur les bases de jQuery. Prparez-vous bien, et n'hsitez pas relire les chapitres que vous n'avez pas compris. Vous allez vous
charger de crer un formulaire interactif !
Explications et pr-requis
Le but de ce travail pratique est de raliser un formulaire interactif, que l'on animera grce jQuery. Ce sera un formulaire trs
basique, avec quatre ou cinq champs au maximum, qui verront leur style CSS changer suivant l'action de l'utilisateur. Le but est
en fait de vrifier les informations entres : nombre de caractres, vrifier que la confirmation du mot de passe est identique
celui-ci, vrifier si tous les champs sont remplis, etc.
Objectif concret
Ce formulaire devra contenir quatre champs :
un champ text pour le pseudonyme ;
un champ password pour le mot de passe ;
un deuxime champ password pour la confirmation du mot de passe ;
et un dernier champ text pour ce que vous voulez, comme l'adresse e-mail par exemple.
De mme, deux boutons devront permettre respectivement d'envoyer les donnes, et de vider les champs. Pas de langage
serveur pour ce TP : tout devra se drouler dans le ct client. videmment, vous devrez vous assurer par la suite, lorsque vous
coderez pour des projets destins au grand public, que les donnes sont bonnes du ct serveur, c'est trs important car le
JavaScript peut tre contourn !
Pour le moment, le but est juste de vous faire pratiquer. Vous devrez vous assurer que l'utilisateur rentre les bonnes infos, de la
bonne manire :
tous les champs devront contenir au moins 5 caractres ;
le mot de passe et la confirmation devront tre bien sr identique ;
si les champs sont vides lors de l'envoi, on affiche un message d'erreur.
Pour indiquer l'erreur au visiteur, il vous suffira d'utiliser CSS : une bordure de champ de couleur rouge ferait par exemple l'affaire.
De la mme manire, si le champ est bon, vous pourriez changer la couleur du champ adquat en vert.
Mthodes requises
Pour pouvoir raliser cela, vous allez devoir user des vnements, vous ne pourrez rien faire sans. De mme, la manipulation du
CSS doit tre matrise afin de pouvoir animer les champs. N'oubliez pas que vous devez traiter tous les cas, car il ne faut jamais
faire confiance l'utilisateur.
Pour rcuprer le contenu d'un champ, vous devrez utiliser une mthode que nous n'avons pas encore traite : val(). La
proprit length vous permettra, elle, de rcuprer la longueur d'une chane de caractre.
Nous vous donnons la structure HTML que nous utilisons, mais absolument rien ne vous empche de crer la votre !
Code : HTML
<div id="erreur">
<p>Vous n'avez pas rempli correctement les champs du formulaire
!</p>
</div>
<form>
<label for="pseudo">Pseudonyme</label> <input type="text"
id="pseudo" class="champ" /><br /><br />
<label for="mdp">Mot de passe</label> <input type="password"
id="mdp" class="champ" /><br /><br />
<label for="confirmation">Confirmation</label> <input
www.siteduzero.com
42/60
Le bloc contenant le message d'erreur DOIT tre invisible par dfaut : nous vous suggrons d'utiliser la proprit
display : none.
Correction
Alors, avez-vous russi ?
Nous vous proposons une correction. Si vous n'avez pas russi obtenir quelque chose de correct, nous vous conseillons
vivement d'tre attentif la correction, vous comprendrez ainsi vos erreurs, et ne les referez plus (n'est-ce pas ?
).
La structure HTML que nous avons utilis est la suivante, pour rappel :
Code : HTML
<div id="erreur">
<p>Vous n'avez pas rempli correctement les champs du formulaire
!</p>
</div>
<form>
<label for="pseudo">Pseudonyme</label> <input type="text"
id="pseudo" class="champ" />
<label for="mdp">Mot de passe</label> <input type="password"
id="mdp" class="champ" />
<label for="confirmation">Confirmation</label> <input
type="password" id="confirmation" class="champ" />
<label for="mail">E-mail</label> <input type="text" id="mail"
class="champ" />
<input type="submit" id="envoi" value="Envoyer" /> <input
type="reset" id="rafraichir" value="Rafrachir" />
</form>
Formulaire basique, contenant quatre champs et deux boutons, prcd d'un bloc invisible contenant un message d'erreur. La
suite tait plutt simple : il ne fallait surtout pas oublier d'inclure le fichier du framework, sinon vous ne pouviez pas utiliser
jQuery :
Code : HTML
<div id="erreur">
<p>Vous n'avez pas rempli correctement les champs du formulaire !</p>
</div>
<form>
<label for="pseudo">Pseudonyme</label> <input type="text" id="pseudo"
class="champ" />
<label for="mdp">Mot de passe</label> <input type="password" id="mdp"
class="champ" />
<label for="confirmation">Confirmation</label> <input type="password"
id="confirmation" class="champ" />
<label for="mail">E-mail</label> <input type="text" id="mail" class="champ"
/>
<input type="submit" id="envoi" value="Envoyer" /> <input type="reset"
id="rafraichir" value="Rafrachir" />
</form>
<!-- on inclut la bibliothque depuis les serveurs de Google -->
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
www.siteduzero.com
43/60
Une des bonnes pratiques adopter est de mettre vos objets jQuery dans des variables. Cela n'est absolument pas obligatoire,
mais a permet une plus grande lisibilit dans le code. En suivant cela, il fallait dterminer quels lments slectionner :
le champ du pseudonyme ;
les champs du mot de passe et de la confirmation ;
le champ de l'e-mail ;
le bouton d'envoi ;
le bouton de rafrachissement du formulaire ;
et enfin tous les champs en gnral (ceux ayant la classe .champ).
Code : JavaScript
$(document).ready(function(){
var $pseudo = $('#pseudo'),
$mdp = $('#mdp'),
$confirmation = $('#confirmation'),
$mail = $('#mail'),
$envoi = $('#envoi'),
$reset = $('#rafraichir'),
$champ = $('.champ');
});
Le plus facile tant fait, je vous propose ensuite de dterminer quel vnement vous deviez utiliser. La bonne faon de faire tait
d'couter le clavier de l'utilisateur, grce l'vnement keyup(), et ce sur chaque champ du formulaire. Il suffisait ensuite de
vrifier avec une condition que la longueur de la chane de caractre tait suprieure 5, grce la mthode val() et l'objet
length que nous vous avions donns :
Code : JavaScript
// le code prcdent se trouve ici
$champ.keyup(function(){
if($(this).val().length < 5){ // si la chane de caractres est
infrieure 5
$(this).css({ // on rend le champ rouge
borderColor : 'red',
color : 'red'
});
}
else{
$(this).css({ // si tout est bon, on le rend vert
borderColor : 'green',
color : 'green'
www.siteduzero.com
44/60
Le principe tait similaire pour vrifier que la confirmation et le mot de passe tait identique :
Code : JavaScript
$confirmation.keyup(function(){
if($(this).val() != $mdp.val()){ // si la confirmation est
diffrente du mot de passe
$(this).css({ // on rend le champ rouge
borderColor : 'red',
color : 'red'
});
}
else{
$(this).css({ // si tout est bon, on le rend vert
borderColor : 'green',
color : 'green'
});
}
});
Nous devons maintenant nous occuper des boutons d'envoi et de rafrachissement. Dans le premier cas, il faut vrifier chaque
champ un un, pour voir si l'un d'entre eux est vide. Si c'est effectivement le cas, il faudra l'indiquer l'utilisateur en affichant le
message d'erreur, et galement en rendant rouge le champ vide.
Il y a plusieurs faons d'y parvenir, et celle que nous utiliserons ici n'est pas la meilleure. Il existe une mthode spcialement
adapte pour traiter chaque lment trouv un un, mais nous ne vous avons pas encore appris comment l'utiliser. A la place,
vous pouviez crer une fonction qui se chargeait de vrifier que le champ donn n'tait pas vide :
Code : JavaScript
function verifier(champ){
if(champ.val() == ""){ // si le champ est vide
$('#erreur').css('display', 'block'); // on affiche le message
d'erreur
champ.css({ // on rend le champ rouge
borderColor : 'red',
color : 'red'
});
}
}
En coutant le clic sur le bouton d'envoi, on pouvait ensuite lancer la fonction de vrification sur chaque champ :
Code : JavaScript
$envoi.click(function(e){
e.preventDefault(); // on annule la fonction par dfaut du
bouton d'envoi
// puis on lance la fonction de vrification sur tous les
champs :
verifier($pseudo);
verifier($mdp);
verifier($confirmation);
verifier($mail);
});
Le reste tait simplissime. Il fallait couter le clic sur le bouton de rafrachissement, et annuler tous les styles CSS sur le
www.siteduzero.com
45/60
formulaire :
Code : JavaScript
$reset.click(function(){
$champ.css({ // on remet le style des champs comme on l'avait
dfini dans le style CSS
borderColor : '#ccc',
color : '#555'
});
$('#erreur').css('display', 'none'); // on prend soin de cacher
le message d'erreur
});
Et voil, nous avons dsormais termin ! Avouez que ce n'tait tout de mme pas sorcier.
Code : JavaScript
$(document).ready(function(){
var $pseudo = $('#pseudo'),
$mdp = $('#mdp'),
$confirmation = $('#confirmation'),
$mail = $('#mail'),
$envoi = $('#envoi'),
$reset = $('#rafraichir'),
$champ = $('.champ');
$champ.keyup(function(){
if($(this).val().length < 5){ // si la chane de caractres
est infrieure 5
$(this).css({ // on rend le champ rouge
borderColor : 'red',
color : 'red'
});
}
else{
$(this).css({ // si tout est bon, on le rend vert
borderColor : 'green',
color : 'green'
});
}
});
$confirmation.keyup(function(){
if($(this).val() != $mdp.val()){ // si la confirmation est
diffrente du mot de passe
$(this).css({ // on rend le champ rouge
borderColor : 'red',
color : 'red'
});
}
else{
$(this).css({ // si tout est bon, on le rend vert
borderColor : 'green',
color : 'green'
});
}
});
$envoi.click(function(e){
e.preventDefault(); // on annule la fonction par dfaut du
bouton d'envoi
champs :
www.siteduzero.com
});
46/60
verifier($pseudo);
verifier($mdp);
verifier($confirmation);
verifier($mail);
$reset.click(function(){
$champ.css({ // on remet le style des champs comme on
l'avait dfini dans le style CSS
borderColor : '#ccc',
color : '#555'
});
$('#erreur').css('display', 'none'); // on prend soin de
cacher le message d'erreur
});
function verifier(champ){
if(champ.val() == ""){ // si le champ est vide
$('#erreur').css('display', 'block'); // on affiche le
message d'erreur
champ.css({ // on rend le champ rouge
borderColor : 'red',
color : 'red'
});
}
}
});
Le code entier faisant moins de 100 lignes, autant vous dire que si vous n'aviez utilis que du JavaScript pur, vous en auriez eu
au moins le double ! C'est ce moment l qu'on se rend compte de l'efficacit de jQuery. Nous esprons que ce TP vous aura
permis de progresser, car la pratique est le meilleur moyen pour obtenir un certain niveau.
Amliorations
Ce formulaire peut encore tre amlior, dans le sens o vous pourriez restreindre encore plus les possibilits de l'utilisateur, en
interdisant de dpasser un certain nombre de caractres dans le pseudo, par exemple. De mme, le style est pour l'instant ultra
basique, rien ne vous empche de le sophistiquer, pour que l'exprience utilisateur soit pousse son maximum.
Quelques amliorations au niveau de la scurit pourraient tre apportes :
vous pourriez vrifier le format de l'adresse e-mail, grce une expression rgulire, faite avec l'objet Regex de JavaScript
;
vous auriez pu galement vrifier que le mot de passe tait sr, en faisant par exemple un mini-indicateur de sret qui se
baserait sur le nombre de caractres, leur diversit, ...
il est possible d'afficher un message d'aide pour chaque champ, lorsque l'utilisateur tape du texte dans ceux-ci ;
...
Le formulaire tant trs basique, des champs auraient eu leur place, comme le sexe, l'ge, la localisation ou mme le prnom.
Essayez de faire cela vous-mme, cela ne sera que bnfique et positif pour votre apprentissage, croyez-nous !
Ce TP ne vous a-t-il pas trop fatigu ? Non ? Tant mieux, car la suite va tre encore pire !
La prochaine partie sera consacre la manipulation du code HTML la vole, directement dans la page, grce aux fonctions de
parcours, aux attributs et la manipulation du DOM. Vous verrez galement comment matriser l'animation de vos lments avec
jQuery, ce qui est une trs bonne chose quand on sait que c'est l'un des plus gros points forts du framework ! Trve de
bavardage, nous vous invitons passer la suite, pour que vous puissiez subir un nouveau TP le plus vite possible.
www.siteduzero.com
47/60
Lors du lancement de cette animation, mon paragraphe s'largira, se dplacera par rapport la hauteur du document, et verra sa
taille de police se fixer 35px.
www.siteduzero.com
48/60
Code : JavaScript
$('p').animate({
width : '150px'
}, 'fast'); // premier exemple avec la valeur fast (200ms)
$('p').animate({
width : '150px'
}, 1000); // second exemple avec 1000ms (= 1s)
La fonction de retour se lancera autant de fois qu'il y a d'lments anims sur la page : si par exemple vous avez trois
paragraphes et que vous lancez le code ci-dessus, trois alertes s'afficheront.
www.siteduzero.com
49/60
Vous savez que le premier argument de la mthode est un objet, contenant chaque proprit animer. Ce qui est intressant, c'est
que les autres arguments peuvent se trouver sous forme d'objet eux aussi. Ainsi, ces deux animations feront exactement la mme
chose :
Code : JavaScript
$('p').animate({
width : '150px'
}, 1000, 'linear', function(){
alert('Animation termine !');
});
// ce code est gal celui-ci :
$('p').animate({
width : '150px'
}, {
duration : 1000,
easing : 'linear',
complete : function(){
alert('Animation termine !');
}
});
Ainsi, vous pourrez aussi agir sur les deux arguments step et queue :
step lancera une fonction chaque tape de l'animation, c'est--dire chaque proprit CSS traite ;
queue dterminera si une animation doit se terminer avant d'en lancer une seconde, et prendra un boolen en tant que
valeur.
Le second argument est utile si vous avez un chanage d'animation ou plusieurs animations la suite ; si vous voulez les lancer
toutes en mme temps, vous devrez mettre la valeur false : ainsi, les mthodes n'attendront pas la fin de la prcdente avant de
se lancer. Dans le cas contraire, queue devra tre dfini true.
Code : JavaScript
$('p')
.animate({
width : '150px'
}, {
duration : 1000,
queue : false
})
.animate({
fontSize : '35px'
}, 1000);
// les deux animations se lanceront en mme temps
www.siteduzero.com
50/60
$('p').animate({
fontSize : ['50px', 'linear'], // cette proprit s'animera de
faon linaire
width : '200px' // les autres s'animeront de la faon dfinie
ensuite : swing
}, 'swing');
La seconde mthode est un peu plus complique mettre en place, dans le sens o vous devrez donner un objet un identifiant
d'un objet (qui, rappelons-le, est lui-mme un argument de la mthode d'animation). La proprit dfinir se nomme
specialEasing :
Code : JavaScript
$('p').animate({
fontSize : '50px',
width : '200px'
},
{
easing : 'swing'
specialEasing : { // on dfinit la proprit
fontSize : 'linear' // puis on liste toutes les proprits
CSS dans un objet en donnant leur volution
}
});
Ajout de valeurs
Une astuce trs pratique en jQuery, c'est qu'il est possible d'ajouter une valeur une proprit CSS. Le principe est similaire
l'ajout de valeur en JavaScript : vous devez passer par les prfixes += ou -=.
Cela ne fonctionne qu'avec les donnes qui sont des nombres entiers (int).
Code : JavaScript
$('p').animate({
www.siteduzero.com
});
51/60
www.siteduzero.com
52/60
show() ;
hide() ;
et toggle().
Ces mthodes fonctionnent toutes de la mme faon, et prennent le mme type d'arguments : duration, qui est, pour rappel, la
dure de droulement en millisecondes, et complete, l'ternelle fonction de retour. Ils sont facultatifs.
Code : JavaScript
$('p').hide('slow'); // cache le paragraphe en 600ms
$('p').show('fast', function(){
alert('Paragraphe affich !');
}); // affiche le paragraphe en 200ms, et lance une alerte la fin
de l'animation
Le cas de toggle()
La mthode toggle() est un peu particulire, tant donn qu'elle agit sur l'objet jQuery en fonction de son tat courant : s'il est
cach, elle l'affiche, s'il est affich, elle le cache. L o vous devez vous rendre compte de son utilit, c'est qu'elle accepte un
argument de condition. Vous pouvez agir dessus grce un boolen, par exemple. Si on lui indique true, elle affichera l'lment,
si on lui indique false, elle fera l'inverse.
Code : JavaScript
$('p').toggle(true); // aura le mme rle que show()
$('p').toggle(false); // aura le mme rle que hide()
Drouler et enrouler
Vous avez sans doute dj vu des sites web utilisant ce genre de chose, pour un systme de drouler / enrouler notamment.
Pour raliser cela, rien de plus simple :
slideDown() droule l'lment pour l'afficher ;
slideUp() enroule l'lment pour le cacher ;
slideToggle() enroule ou droule selon l'tat courant de l'lment.
Les arguments ne changent pas, ils sont les mmes que pour show(), hide() et toggle().
Apparition et disparition
On va jouer ici sur l'opacit de l'lment influenc.
fadeIn() affiche l'lment progressivement ;
fadeOut() cache l'lment, en ajustant l'opacit galement.
fadeToggle() affiche ou cache l'lment, grce l'opacit.
Le framework met galement disposition une fonction permettant de contrler l'opacit finale de l'lment anim. Il s'agit de
fadeTo(), qui prend en argument obligatoire un nombre dcimal (float) entre 0 et 1 indiquant l'opacit.
www.siteduzero.com
53/60
Code : JavaScript
$('p').fadeTo('normal', 0.5); // ajuste l'opacit et la fixe 0.5
L'argument de dure de l'animation est dfinit comme tant facultatif ; nanmoins, vous devez l'indiquer, sans quoi la
mthode ne fonctionnera pas.
Dclencheur d'vnement
Une mthode trs particulire que le dclencheur d'vnement. Vous avez dj vu l'vnement trigger(), dans le chapitre sur
les vnements. Eh bien, la mthode que nous allons tudier maintenant se nomme triggerHandler(), et ralise la mme
chose, quelque diffrences prs.
Cette fonction dclenche l'vnement donn, mais n'associe en aucun cas l'action du navigateur. Par exemple, admettons le code
suivant :
Code : JavaScript
$('#bouton1').click(function(){
$('#champ').trigger('focus');
});
$('#champ').focus(function(){
alert('Bonjour !');
});
Une fois le bouton cliqu, le navigateur, par l'vnement focus(), va associer le curseur de votre souris au champ de texte.
C'est parfois fcheux, et pour viter a, il existe la mthode triggerHandler().
Seconde restriction : seul le premier lment slectionn sera influenc.
www.siteduzero.com
54/60
$('p').slideDown();
var fileAttente = $('p').queue('fx'); // je stocke la file
d'attente, le tableau, dans une variable
alert(fileAttente.length); // renvoie 4
On peut spcifier le nom de la file d'attente, en donnant un argument comme dans l'exemple ci-dessus. Le nom par
dfaut est fx .
Pour rajouter une fonction dans la file d'attente, il suffit de passer ladite fonction en tant qu'argument.
Code : JavaScript
$('p').fadeOut();
$('p').fadeIn();
$('p').slideUp();
$('p').slideDown();
$('p').queue(function(){
alert('Nouvelle fonction dans la file !'); // alerte s'affichant
la fin de la file
});
Enfin, la dernire chose possible faire est de carrment remplacer le tableau par un nouveau, que vous aurez cr directement.
Cela n'a pas normment d'intrt, mais c'est notamment utile dans le cas o vous voulez vider l'array, ce qui a pour effet
d'annuler toute animation.
Code : JavaScript
$('p').fadeOut();
$('p').fadeIn();
$('p').slideUp();
$('p').slideDown();
$('p').queue('fx', []); // fait disparatre le paragraphe, puis vide
la file d'attente
www.siteduzero.com
55/60
Dsactivation
www.siteduzero.com
56/60
Enfin, pour terminer, sachez qu'une proprit permet de dsactiver toutes les animations de la page. Il suffit de passer true la
proprit jQuery.fx.off.
Ouf ! C'tait un chapitre assez consquent, vous ne trouvez pas ?
Les chapitres suivants seront un peu moins difficiles avaler, mais il faudra rester concentr, car nous abordons la manipulation
du DOM.
www.siteduzero.com
57/60
(Re)dfinir un attribut
La seconde utilisation possible de cette mthode est de dfinir, ou redfinir un attribut en passant par un deuxime argument.
Comprenez par l que mme si l'attribut donn n'existe pas dans la balise, il sera cr automatiquement. De mme, la nouvelle
valeur donne crasera celle en place si elle est dj dfinie.
Code : JavaScript
$('img').attr('src', 'nouveauChemin/photo.png'); // change
l'attribut src en crasant l'ancienne valeur
$('img').attr('title', 'Nouvelle photo'); // cr l'attribut title
dans l'lment s'il n'existe pas
L'attribut type des formulaires ne peut pas tre chang, car Internet Explorer l'interdit. La fonction est donc bloque
sur tous les navigateurs.
www.siteduzero.com
58/60
la mthode attr(), qui contiendra chaque attribut modifier et leurs nouvelles valeurs respectives.
Code : JavaScript
$('img').attr('src', 'nouveauChemin/photo.png');
$('img').attr('alt', 'Nouvelle photo');
$('img').attr('title', 'Nouvelle photo');
// mauvaise mthode
$('img').attr({
src : 'nouveauChemin/photo.png',
alt : 'Nouvelle photo',
title : 'Nouvelle photo'
});
// bonne mthode
Supprimer un attribut
Jusque l, il est possible d'craser un attribut en lui affectant une valeur nulle. Ce n'est pas trs propre, mais a fonctionne.
Pourtant, une mthode a t conue spcialement pour raliser cela : removeAttr(). Il suffit de lui passer le nom de l'attribut
en argument, et elle se charge de le supprimer dfinitivement du DOM.
Code : JavaScript
$('img').removeAttr('title'); // supprime l'attribut title des
images
www.siteduzero.com
59/60
Code : JavaScript
$('.vert').attr('class', 'rouge'); // cet lment aura la classe
.rouge
$('.vert').addClass('rouge'); // cet lment aura les classes .vert
et .rouge
$('.vert').addClass('rouge bleu jaune'); // cet lment aura les
classes .vert, .rouge, .bleu et .jaune
Vous pouvez excuter une fonction anonyme en tant qu'argument de la mme faon que dans la partie prcdente.
Vous pouvez contrler l'action de cette mthode grce un second argument, sous la forme de boolen : true permettra
d'ajouter la classe, alors que false la supprimera.
www.siteduzero.com
60/60
Code : JavaScript
// ces deux codes sont quivalents :
$('p').addClass('vert');
$('p').toggleClass('vert', true);
// ces deux codes sont quivalents :
$('p').removeClass('vert');
$('p').toggleClass('vert', false);
Les attributs sont un passage obligatoire sur le chemin de la matrise du framework jQuery. Vous avez vu qu'ils sont extrmement
utiles, et croyez-nous : vous n'avez pas fini de les utiliser.
Dans le prochain chapitre, nous apprendrons nous dplacer dans le DOM, pour exploiter chaque lment d'une page web
dynamiquement !
Nous esprons que ce tutoriel vous a permis de dbuter en jQuery dans les meilleures conditions.
N'hsitez pas nous laisser un petit commentaire pour nous faire part de vos impressions sur ce tutoriel, nous les lirons avec
attention !
Ce tutoriel est sous licence Creative Commons BY-NC-SA 2.0 .
www.siteduzero.com