Conception d'un site web - NFA074, 6 ECTS - Javascript / jQuery - Index of

La page est créée Alain Mallet
 
CONTINUER À LIRE
Conception d'un site web - NFA074, 6 ECTS - Javascript / jQuery - Index of
Conception d’un site web
      NFA074, 6 ECTS

                                Chapitre 4
                       Javascript / jQuery
Conception d'un site web - NFA074, 6 ECTS - Javascript / jQuery - Index of
Le plus grand soin a été apporté à la réalisation de ce support pédagogique afin de vous fournir une
information complète et fiable. Cependant, le Cnam Champagne-Ardenne n'assume de responsabilités,
ni pour son utilisation, ni pour les contrefaçons de brevets ou atteintes aux droits de tierces personnes
qui pourraient résulter de cette utilisation.

Les exemples ou programmes présents dans cet ouvrage sont fournis pour illustrer les descriptions
théoriques. Ils ne sont en aucun cas destinés à une utilisation commerciale ou professionnelle.

Le Cnam ne pourra en aucun cas être tenu pour responsable des préjudices ou dommages de quelque
nature que ce soit pouvant résulter de l'utilisation de ces exemples ou programmes.

Tous les noms de produits ou autres marques cités dans ce support sont des marques déposées par
leurs propriétaires respectifs.

Ce support pédagogique a été rédigé par Arnaud RENARD, enseignant vacataire au Cnam Champagne-
Ardenne.

Copyright  2013-2014 - Cnam Champagne-Ardenne.

Tous droits réservés.

L'utilisation du support pédagogique est réservée aux formations du Cnam Champagne-Ardenne. Tout
autre usage suppose l'autorisation préalable écrite du Cnam Champagne-Ardenne.

Toute utilisation, diffusion ou reproduction du support, même partielle, par quelque procédé que ce soit,
est interdite sans autorisation préalable écrite du Cnam Champagne-Ardenne. Une copie par
xérographie, photographie, film, support magnétique ou autre, constitue une contrefaçon passible des
peines prévues par la loi, du 11 mars 1957 et du 3 juillet 1995, sur la protection des droits d'auteur.

                                                                                             Décembre 2015
Conception d'un site web - NFA074, 6 ECTS - Javascript / jQuery - Index of
Javascript et JQuery
Ce chapitre va traiter de Javascript par l’intermédiaire de JQuery. Il ne s’agit pas de devenir un expert
des deux technologies, mais d’en apprendre les bases afin d’agrémenter vos pages web. En guise de
prérequis, il est considéré que vous connaissez HTML (qui permet de créer la structure d’une page web)
et CSS (qui permet de définir les styles d’affichage de la page). En outre, vous avez quelques bases de
DOM, le Document Object Model, qui est l’approche pour comprendre la structure du document HTML et
vous savez le manipuler en CSS à l’aide des sélecteurs.
En JQuery, nous allons apprendre à :
    - Sélectionner un élément ou des éléments dans une page HTML ;
    - Modifier le contenu d’éléments ainsi que leurs styles ;
    - Réagir à des événements qui ont lieu sur la page ;
    - Créer des animations

Avant de commencer, il convient de planter le décor. Javascript est un
langage de programmation qui est interprété par votre navigateur. Il ne
décrit pas la structure de la page comme le fait HTML, mais décrit les
actions qui doivent être effectuées. Les codes Javascript seront donc
exécutés par le navigateur et ont la capacité de manipuler la page web,
d’interagir avec l’internaute et de créer des animations. C’est un
langage orienté objet à prototype, nous utiliserons donc des objets pour
manipuler des chaines de caractères -des textes- ou des nombre (ou
autres objets mathématiques). Le langage a été créé en 1995 par
Brendan Eich (photo ci-contre), alors qu’il officiait pour Netscape
Communication (une entreprise pionnière du web depuis 1994, connue
pour son navigateur Netscape dans les années 90, dissolue en 2003) et
alors qu’il était déjà membre du conseil d’administration de Mozilla.

Pour ajouter du Javascript à votre page web, les quelques lignes suivantes suffisent si elles sont insérées
dans la page html :

alert("hello world");

Il est aussi possible d’écrire la totalité du code Javascript dans un fichier séparé –dont l’extension est
généralement .js-, et de l’inclure dans votre page de la manière suivante.

Dans les deux cas, le script sera alors exécuté par votre navigateur au moment où il est lu. Il est aussi
possible d’intégrer du Javascript directement dans les balises HTML, mais nous ne le ferons pas.

Dans le cadre de NFA074, nous allons directement apprendre JQuery qui est une bibliothèque JavaScript
libre et multi-plateforme créée pour faciliter l'écriture de scripts côté client, dans le code HTML des pages
web. La première version de JQuery a été lancée en janvier 2006 par John Resig. Pour nous, cette
librairie va présenter un triple avantage :
    - JQuery propose une utilisation de haut niveau qui permet de faire la même chose que Javascript,
         mais avec beaucoup plus de souplesse et d’efficacité. Bien sûr, certaines parties seront écrites
         en Javascript ;
    - Le code JQuery est compatible avec les principaux navigateurs du marché. Ainsi, nous n’aurons
         pas à gérer cet aspect qui peut être délicat en Javascript ;
    - JQuery s’est imposé comme la référence et nombre d’extensions sont disponibles. Nous aurons
         peut-être l’occasion d’en tester une.

Chapitre 4 : Javascript et jQuery                                                                      1 / 46
Conception d'un site web - NFA074, 6 ECTS - Javascript / jQuery - Index of
1.      Sélection et actions
Avant d’entrer dans le cœur du cours de JQuery/javascript, nous allons procéder à quelques opérations
basiques.

On peut décomposer l’action minimale JQuery de la manière suivante :

       Sélection                                   .                      Action
      d'éléments
C’est le schéma qui sera utilisé pour cette première partie :
   - Sélection d’éléments : Un certain nombre d’éléments sont sélectionnés (des images, des liens,
        le document, …) à l’aide d’un sélecteur reprenant la syntaxe des sélecteurs CSS3
   - Action : Des actions on faites sur la sélection. Il peut s’agir de modifier la structure DOM, ou
        d’intervenir sur les styles, les contenus et les attributs des éléments qui ont déclenchés l’action.

Ce schéma sera complété par la suite.

Voici quelques exemples de ce qu’il sera est possible de faire :
   - Changer la couleur des liens.
   - Valide un formulaire.
   - Faire disparaitre un titre.
   - Modifier la valeur d’un champ de formulaire
   - Récupérer la valeur d’un champ de formulaire et l’utiliser pour modifier le contenu d’un bloc.
   - Modifier la source d’une image
   - Compter le nombre d’image dans une page

Pour ce chapitre, nous allons utiliser l’interface spécialement développée pour ce cours :
http://www.action-creation.fr/cnam/nfa074/chapitre4/jqueryLab/

                                                                                                Décembre 2015
Sur cette interface, vous avez la possibilité de sélectionner les exercices et leur correction dans le menu
déroulant du haut. Apparaissent alors 3 panneaux d’édition et une fenêtre de résultat !
    - Le code HTML sur la gauche, que vous n’avez pas le modifier.
    - Au centre, le code Javascript / Jquery qui sera déclenché immédiatement après le chargement
        de la page
    - Le code CSS en bas
    - Le résultat sur le panneau de droite, qui est mis à jour après l’utilisation d’un bouton « Run
        Code »
Dans cette partie, le code JQuery sera exécuté soit dès le chargement de la page (Run Code Start) soit
lors du clic sur le bouton Go (Run Code Button). Dans la suite du cours, on pourra le déclencher à façon,
lors d’un clic, ou au bout d’un certain temps par exemple.

Chapitre 4 : Javascript et jQuery                                                                     3 / 46
Lab 1
   - Sélectionner l’exercice 1.
   - Appuyer sur l’un puis l’autre des bourrons « Run Code » pour mettre à jour le résultat dans les
      deux modes.
   - Modifier le CSS pour que le texte s’affiche en bleu
   - Appuyer sur « Run Code » pour mettre à jour le résultat. Vous le ferez à chaque fois que
      nécessaire.
   - Créez une class redbeans qui permet d’afficher le texte en rouge
   - Nous allons maintenant sélectionner tous les h1 de la page pour leur ajouter la classe redbeans :

           Sélection des h1                                               Ajout de la class
                                                       .
                   $("h1")                                          addClass("redbeans");

    -   Quelques explications :

$

Le signe $ (dollar) indique que l’on est en train de faire du JQuery. $ est même la fonction principale de
JQuery. Une fonction étant un ensemble nommé d’opérations que l’on peut appeler d’un coup, juste en
utilisant le nom de la fonction, $ dans notre cas. Une fonction admet aussi des paramètres, qui seront
spécifiés entre parenthèses et qui permettent d’adapter l’action de la fonction. Ainsi, une même fonction
peut être utilisée avec des paramètres différents : c’est tout l’intérêt des fonctions.

$("h1")

Ici, la fonction $ est utilisée avec la chaine de caractères h1 comme paramètre. C’est l’une des
utilisations de la fonction $ : on lui donne une un sélecteur du même genre que l’on utilise en CSS.
Dans le cas actuel, nous avons donc sélectionné l’ensemble des éléments e type h1 contenus dans
notre document.

$("h1").

Juste après la sélection, on utilise le . (point) suivi d’une autre fonction. Cela va indiquer que la seconde
fonction va s’appliquer à la sélection effectuée par la fonction $. Avec JQuery, on a la possibilité de
chainer ainsi les fonctions, à l’aide du . (point).

$("h1").addClass("redbeans");

La fonction addClass permet d’ajouter une class aux éléments de la sélection. C’est une fonction, donc
on lui adjoint des parenthèses afin de spécifier des paramètres. En l’occurrence, une chaine de caractère
contenant la class à ajouter. On pourrait même ajouter plusieurs classes : addClass("classe1 classe2");
Chaque ligne de javascript se termine par un ; (point-virgule).

                                                                                                 Décembre 2015
-    Ajoutons une ligne au bloc JS :

$("h1").html("Nouveau titre");

    -    La fonction html permet de modifier le contenu des éléments. La chaine de caractère indiquée en
         paramètre peut être du html, avec des balises.

$("h1").html("Nouveau titre");

    -    Charger la correction de l’exercice 1 dans la rubrique « choix de l’exercice » et testez-la.
    -    Une ligne est ajoutée dans la partie js. Il s’agit d’un commentaire car elle débute par deux slashs
         (ou barre oblique en bon français). Cette ligne ne sera pas interprétée par votre navigateur et
         les instructions qu’elle contient ne seront pas exécutées.
    -    Décommenttez cette ligne (en retirant les slashs) et commentez les deux premières lignes.
    -    On remarque que le résultat est le même avec une seule ligne. En effet, nous avons indiqué que
         JQuery permet de chainer les actions, ce qui est assez pratique.

Lab 2
   - A l’aide de la fonction removeClass (qui a la même syntaxe que addClass), vous pouvez supprimer
      une class des éléments de la sélection
   - Pour sélectionner uniquement les éléments qui portent la classe blueberry, on utilise le sélecteur
      .blueberry de cette manière : $(".blueberry")
   - On peut même choisir uniquement les h1 qui portent la classe blueberry : $("h1.blueberry"). Cela
      fonctionne comme en CSS, c’est souple et efficace
   - Chargez l’exercice 2
   - Retirez la classe impaire des élements qui la portent.
   - La première correction ne porte que jusqu’à cette partie.
   - Modifier la solution pour retirer la classe impaire des élements qui la portent et l’ajouter aux
      éléments qui ne la portent pas.
   - En mode « Button », vous pouvez même le lancer plusieurs fois

Chapitre 4 : Javascript et jQuery                                                                      5 / 46
Lab 3
Pour ce troisième lab, nous allons modifier les styles des éléments sélectionnés. Pour accéder aux
propriétés CSS en JQuery, on applique la fonction css à la sélection : $("h1").css(…);
Bien sûr, la fonction CSS admet des paramètres : les propriétés CSS que l’on veut voir appliquer à la
sélection.

   - Appel avec une seule règle :
$("h1").css({"color" :"red"});

   - Appel avec plusieurs règles :
$("h1").css({"color":"red","text-decoration":"none"});

Le paramètre de la fonction est un tableau associatif qui associe une valeur (qui est la valeur de la
propriété CSS : red, none) à une clé (qui est le nom de la propriété CSS : color, text-declaration).
Chaque clé ou valeur étant une chaine de caractère, on utilise une simple ou double quote pour en
marquer le début et la fin. Le caractère : (deux points) permet de séparer la clé de la valeur. La
virgule permet.

Lab 4
Il y a 3 manières d’ajouter un élément dans une page. Avant la sélection, après la sélection, Append
élément

   - Après :
$( "h1" ).after("h2 après");

   - Avant :
$( "h1" ).before("h2 avant");

   - A l’intérieur (en dernier) :
$("h1").append(" dans h1 ");

   -   Avec la méthode after, proposer un formulaire (chaque ligne contient titre, nom, prénom)
       auquel on peut ajouter une ligne en appuyant sur « GO »
   -   Question subsidiaire : après avoir ajouté une ligne dans le formulaire, la colorer en rouge (mais
       juste elle, pas les autres). Cette coloration est retirée dès que l’on ajoute une nouvelle ligne.

Lab 5
Les fonctions show et hide permette de cacher ou de montrer la sélection.

   - Pour cacher la sélection :
$("h1").hide();

   - Pour afficher la sélection
$("h1").show();

Dans l’énoncé du lab 5, chacune de ces fonctions admet un paramètre. Il s’agit de la durée de
l’opération.

   -   Créez deux éléments, l’un est caché et l’autre est affiché. En JQuery, afficher progressivement
       celui qui est caché et cacher instantanément celui qui est affiché.
   -   Essayer les fonctions suivantes : fadeIn, fadeOut, fadeToggle, slideUp, slideDown, slideToggle.

                                                                                              Décembre 2015
2.        Sélection, événements et actions
Dans la suite de ce chapitre, nous allons nous projeter dans des cas concrets, sans utiliser le jqueryLab.

On peut décomposer le scénario le plus classique d’utilisation de JQuery de la manière suivante :

      Sélection                            Gestion
                                    .                                 .              Action
     d'éléments                         d'événements

C’est le schéma qui sera utilisé dans la suite de ce cours :
   - Sélection d’éléments : Un certain nombre d’éléments sont sélectionnés (des images, des liens,
        le document, …) à l’aide d’un sélecteur reprenant la syntaxe des sélecteurs CSS3
   - Gestion d’événements : Un événement est géré sur cette sélection. Il peut s’agir du clic, du
        double clic, du survol à la souris, d’une modification, etc …
   - Action : Si cet événement est déclenché, des actions auront lieu. Il peut s’agir de modifier la
        structure DOM, ou d’intervenir sur les styles, les contenus et les attributs des éléments qui ont
        déclenchés l’action.

Ce schéma sera complété par la suite.

Voici quelques exemples de ce qu’il sera est possible de faire :
   - Quand je survole un lien, il change de couleur.
   - Quand je clic que un bouton, je valide un formulaire.
   - Quand je double-clic sur un titre, il disparait.
   - Quand je modifie un champ de formulaire, le contenu d’un autre paragraphe est modifié.
   - Quand je clic que un lien, une fenêtre modale s’ouvre.

Chapitre 4 : Javascript et jQuery                                                                    7 / 46
2.1. Premier exemple

En guise de premier exemple, on peut vouloir ajouter une bordure rouge lors du clic sur les images d’une
page web :

         Sélection :                      Gestion de l’événement :                      Action :
                                 .                                     .
         les images                                 clic                          ajouter une bordure

Si l’on souhaite traduire ce schéma par une phrase, voici ce que cela donnerait :

Sur l’ensemble des images de ma page, je souhaite gérer l’événement « clic » et lorsque celui-ci est
déclenché, j’ajoute une bordure sur l’image qui fait l’objet de l’événement.

Cet exemple est disponible en ligne, pour test (et pour clics), et sera expliqué dans la suite du cours.
Aucun besoin d’afficher le code source de cette page pour le moment :
      http://www.action-creation.fr/cnam/nfa074/chapitre4/exemple1.html

Voici le résultat si l’on clique sur l’image du milieu :

Exercice 1 :

Téléchargez le fichier jquery.js et enregistrez-le dans votre répertoire de travail.
http://www.action-creation.fr/cnam/nfa074/chapitre4/jquery.js

Créez une page html et incluez-y ce fichier Javascript juste avant le .
Nous sommes maintenant prêts à commencer.

Vous pouvez aussi télécharger le fichier jquery.js sur le site jquery.com (http://jquery.com/). Vous y
trouverez par ailleurs toute la documentation liée à la bibliothèque. Il existe quelques sources en
français, qui ne sont pas toujours à jour. jquery-fr peut servir de base : http://www.jquery-fr.com.

                                                                                               Décembre 2015
2.2. L’événement fondateur : le chargement de la structure DOM

Comme il a été dit précédemment, la première étape du schéma est la sélection d’un ensemble d’élément
dans la structure DOM. Or, il faut en premier lieu nous assurer que la totalité de la structure DOM soit
chargée avant de commencer notre sélection. En effet, si l’on sélectionne les images d’un document
alors qu’une partie de la page n’est pas encore chargée –donc interprétées par votre navigateur-, on
peut aisément imaginer qu’une partie des images ne sera pas considérée.

Avant toute chose, on va donc devoir attendre la fin du chargement de la page. En langage JQuery :
avant toute sélection, on doit attendre que l’événement « le document est chargé » soit déclenché. Cette
locution peut se traduite par le schéma suivant :

                                         Gestion de l’événement :
          Sélection :
                                         ready sur cette sélection                     action :
       du document (la
                                    .    (qui est déclenché quand     .         afficher un message
      structure dom du
                                          la structure est chargée            (une alerte en javascript)
         document)
                                              par le navigateur)

Cet exemple est disponible en ligne, pour test :
       http://www.action-creation.fr/cnam/nfa074/chapitre4/exemple2.html

Penchons-nous maintenant sur le code Javascript de cette page, en le décomposant :

                                        2.2.1. Sélection du document

$

Le signe $ (dollar) indique que l’on est en train de faire du JQuery. $ est même la fonction principale de
JQuery. Une fonction étant un ensemble nommé d’opérations que l’on peut appeler d’un coup, juste en
utilisant le nom de la fonction, $ dans notre cas. Une fonction admet aussi des paramètres, qui seront
spécifiés entre parenthèses. Dans le cas général, l’ensemble des instructions de la fonction aura accès
à ces paramètres. Ainsi, une même fonction peut être utilisée avec des paramètres différents : c’est tout
l’intérêt des fonctions.

$(document)

Ici, la fonction $ est utilisée avec la variable document, qui représente le document HTML.
Nous avons donc sélectionné le document HTML.

Chapitre 4 : Javascript et jQuery                                                                     9 / 46
2.2.2. Gestion de l’événement ready

$(document).ready(

);

Juste après la sélection, on utilise le . (point) suivi d’une autre fonction : la fonction ready. Cela va
indiquer que la fonction ready va s’appliquer à la sélection effectuée par la fonction $. Avec JQuery, on
a la possibilité de chainer ainsi les fonctions, à l’aide du . (point). La fonction ready permet de gérer
l’événement de chargement de la structure de la page. C’est une fonction, donc on lui adjoint des
parenthèses afin de spécifier des paramètres. Chaque ligne de javascript se termine par un ; (point-
virgule).

$(document).ready(
      function(){

       }
);

Une fois le document ready, un ensemble d’instruction sera défini (la partie ‘action’) au sein d’une
fonction (une ensemble d’instruction, on l’a dit tout à l’heure), d’où la définition en ligne (cad sans lui
donner de nom) de la fonction à l’aide de la structure suivante : function(){ … }. Du point de vue de
la fonction ready, la fonction définie en ligne est un paramètre.

                                     2.2.3. Action et affichage d’un message

Les possibilités d’action sont infinies. Dans cet exemple, nous affichons juste un message à l’aide de la
fonction alert :

$(document).ready(
      function(){
            alert("Document chargé");
      }
);

La fonction alert admet un argument qui est une chaine de caractères, délimitée par des simples quotes
ou de doubles quotes (guillemets simples ou guillemets doubles). Nous reviendrons ultérieurement sur
les chaines de caractères.

                                                                                               Décembre 2015
2.3. Les sélections

Les sélecteurs CSS peuvent être utilisées pour sélectionner des éléments de la structure DOM :

         Sélecteur CSS                       Sélecteur jQuery                     Signification

 ul                                 $('ul')                       Les balises 

 #main                              $('#main')                    Les balises dont l’id est main
 .rouge                             $('.rouge')                   Les balises qui ont la classe rouge

 ul.bleu                            $('ul.bleu')                  La balise  de classe bleu
 div ul                             $('div ul')                   La balise  contenue dans la balise
                                                                  
 [src]                              $('[src]')                    Les balises qui ont un attribut src

 li[name]                           $('li[name]')                 Les balises  qui possèdent un
                                                                  attribut name

 li[rel="28"]                       $('li[rel="28"]')             Les balises  qui possèdent un
                                                                  attribut rel de valeur 28

 *                                  $('*')                        Toutes les balises du document
 a, img                             $('a, img')                   Les liens et les images
 div>ul li[name="pair"]             $('div>ul li[name="pair"]')   La balise  contenue dans une
                                                                  balise , elle-même contenue
                                                                  directement dans une balise , et
                                                                  dont l'attribut name vaut pair

La sélection JQuery va sélectionner un ensemble d’éléments, c’est-à-dire 0, 1 ou plusieurs éléments.
Nous allons pouvoir utiliser cet ensemble, soit pour y positionner un gestionnaire d’événement, soit pour
effectuer quelques modifications. Nous verrons seconde possibilité par la suite.

Nous allons tout d’abord revenir en détail sur les sélecteurs en JQuery.

Chapitre 4 : Javascript et jQuery                                                                       11 / 46
2.3.1. Sélecteurs d'attributs
    Sélecteur                                         Éléments sélectionnés

['nom="valeur"']     Éléments qui possèdent un attribut nom dont la valeur est exactement la valeur
                     spécifiée.

['nom*="valeur"']    Éléments qui possèdent un attribut nom qui contient (partiellement ou totalement) la
                     valeur spécifiée.

['nom~="valeur"']    Éléments qui possèdent un attribut nom qui contient la valeur spécifiée,
                     potentiellement délimité par des espaces.

['nom$="valeur"']    Éléments qui possèdent un attribut nom qui se termine par la valeur spécifiée.

['nom!="valeur"']    Éléments qui ne possèdent pas l'attribut nom, ou qui possèdent un attribut
                     nom différent de la valeur spécifiée.

['nom^="valeur"']    Éléments qui possèdent un attribut nom qui commence par la valeur spécifiée.

                                     2.3.2. Sélecteurs hiérarchiques

    Sélecteur                                         Éléments sélectionnés
('p>e')             Éléments e directement descendants d'éléments p

('p+e')             Éléments e directement précédés d'un élément p

('p~e')             Éléments e précédés d'un élément p
:empty              Éléments qui n'ont pas d'enfant
:first-child        Premier enfant
:first              Premier élément
:last-child         Dernier enfant
:last               Le dernier élément de la sélection
:nth-child()        Élément qui est l'énième enfant de son parent
:only-child         Éléments qui sont enfants uniques de leur parent

                                                                                                  Décembre 2015
2.3.3. Pseudo-sélecteurs d'éléments
  Sélecteur                                             Éléments sélectionnés

 :even             Éléments pairs. Exemple :
                   tr:even

 :odd              Éléments impairs
 :eq()             Élément dont l'index est spécifié. Par exemple :eq(2) pour sélectionner le troisième élément.
 :gt()             Éléments dont l'index est supérieur à (greater than) l'index spécifié : gt(8) par exemple

 :lt()             Éléments dont l'index est inférieur à (lower than) l'index spécifié

                                           2.3.4. Sélecteurs d'éléments particuliers
        Sélecteur                                            Éléments sélectionnés
 :header                     Tous les titres  à 
 :hidden                     Les éléments cachés
 :visible                    Éléments visibles
 :not()                      Éléments qui ne correspondent pas au sélecteur spécifié

Chapitre 4 : Javascript et jQuery                                                                              13 / 46
2.3.5. Pseudo-sélecteurs                       spécifiques           aux
                           formulaires
  Pseudo-sélecteur                                   Éléments sélectionnés

:input                Tous les éléments de type input, textarea, select et button
:button               Éléments de type button

:checkbox             Éléments de type checkbox

:checked              Éléments qui sont cochés
:radio                Éléments de type radio
:reset                Éléments de type reset
:image                Tous les boutons de type image
:submit               Éléments de type submit
:text                 Éléments de type text

:password             Éléments de type password
:selected             Éléments sélectionnés
:focus                Sélectionne l'élément s'il a le focus
:enabled              Éléments validés

                              2.3.6. Sélecteurs utilisés en cas de résultats
                           multiples
 Pseudo-sélecteur                                   Éléments sélectionnés
:first               Premier élément
:last                Dernier élément
:eq()                Élément dont l'index est spécifié
:gt()                Éléments dont l'index est supérieur à l'index spécifié
:lt()                Éléments dont l'index est inférieur à l'index spécifié
:even                Éléments d'index pair
:odd                 Éléments d'index impair

:empty               Éléments qui n'ont pas d'enfant
:not()               Éléments qui ne correspondent pas au sélecteur spécifié. Par exemple :
                     a:not(.selected)

                                                                                              Décembre 2015
2.4. Les actions
Une fois un ensemble d’éléments sélectionné, il est possible soit de gérer les événements liés à ces éléments,
soit d’y effectuer quelques modifications :

          Expression JQuery             Description

 $("a").addClass ("toto") ;             Ajouter la classe toto aux balises a

 $("a").removeClass ("toto") ;          Retirer la classe toto aux balises a

 $("a").toggleClass ("toto") ;          Ajoute la classe si elle n’était pas présente, et vice-versa.

 $("a").css ("color","#ff0000") ;       Modifie une propriété CSS

 $("a").attr ("href","page2.html") ;    Modifie ou crée l’attribut href

 $("a").removeAttr ("href") ;           Supprime l’attribut href

 $("a").text ("bonjour") ;              Modifie le texte contenu dans les balises

 $("a").html ("salut mec") ;     Modifier le contenu par du html

 $("a").val ("bonjour") ;               Modifie la valeur d’un input de formulaire

 $("a").show () ;                       Affiche les éléments

 $("a").hide () ;                       Cache les éléments

 $("a").toggle () ;                     Affiche si les éléments sont cachés, et vice-versa.

 $("a").slideDown () ;                  Affiche les éléments en les déroulant.

 $("a").slideUp () ;                    Cache les éléments en les enroulant.

 $("a").slideToggle () ;                Affiche les éléments en les déroulant si ils sont cachés, et vice-versa.

 $("a").fadeIn () ;                     Affiche les éléments par progression de la transparence.

 $("a").fadeOut () ;                    Cache les éléments par progression de la transparence.

 $("a").fadeToggle () ;                 Affiche les éléments par progression de la transparence si ils sont
                                        cachés et vice-versa.

Il y a d’autres effets, plus ou moins évolués, mais ceux présentés ci-dessus seront suffisants pour NFA074.
Certains effets acceptent des paramètres qui sont détaillés sur le site jquery.com.

Chapitre 4 : Javascript et jQuery                                                                             15 / 46
2.5. Les événements
Nous connaissons déjà l’événement ready qui a la particularité de s’appliquer à $(document). La plupart des
autres événements s’appliquent à des éléments issus d’une sélection. Il y a trois types d’événements, ceux
déclenchés par la souris (le clic, le double clic, l’appuie sur le bouton, le déplacement, …), ceux déclenchés par
le clavier (appuie / relâche d’une touche), et ceux liés aux formulaires (validation, modification, focus, …)

                                         2.5.1. Evénements souris

                  Action                       Fonction
 Clic                                     click()

 Double-clic                              dblclick()

 Passage de la souris                     hover()

 Mouvement dans l’élément                 mouseover()

 Quitter l’élément                        mouseout()

 Rentrer dans un élément                  mouseenter()

 Quitter un élément                       mouseleave()

 Presser un bouton de la souris           mousedown()

 Relâcher un bouton de la souris          mouseup()

 Scroller (utiliser la roulette)          scroll()

L’exemple suivant décrit la gestion du clic sur les images de la page :

$("img").click(function(){

});

Comme nous l’avons expliqué précédemment, la sélection des images ne peut se faire qu’une fois la
structure de la page chargée. Ainsi, nous allons placer ce code à l’intérieur du gestionnaire de ready :

$(document).ready(function(){
      $("img").click(function(){

        });
});

Dans le gestionnaire de clic, il est possible d’afficher un message, comme le ferait l’exemple suivant :

$(document).ready(function(){
      $("img").click(function(){
            alert("quelqu’un a cliqué sur une image");
      });
});

Il est aussi possible de sélectionner des éléments et d’appliquer des effets dessus :

$(document).ready(function(){
      $("img").click(function(){
            $(".message").show();
      });
                                                                                                        Décembre 2015
});

Ou même d’appliquer plusieurs effets en les chainant à l’aide du . (point) :

$(document).ready(function(){
      $("img").click(function(){
            $(".message").text("quelqu’un a cliqué sur une image").show();
      });
});

Exercice 2 :
Ecrivez une page contenant une image, et un textarea. En vous appuyant sur l’exemple ci-dessus,
adaptez le contenu du div en fonction du clic sur l’un ou l’autre des deux éléments.

Exercice 3 :
Ecrivez une page contenant deux images. Quand l’utilisateur clique sur une image, celle-ci disparait et
l’autre apparait.

Chapitre 4 : Javascript et jQuery                                                                17 / 46
2.5.2. La variable événement
L'objet événement est disponible à chaque déclenchement d'un événement. C'est le premier paramètre
disponible dans la fonction de gestion de l'événement, c'est pourquoi cette variable (e dans l’exemple
ci-dessus) est présente dans les parenthèses lors de la définition en ligne de la fonction.

$(document).ready(function(){
      $("td").click(function(e){

              // ici, on va pouvoir manipuler la variable événement

       });
});

On va pouvoir utiliser cette variable événement afin de contrôler l’événement :

        2.5.2.1.   Prevent Default

Pour un clic sur un lien, par exemple, le clic permet de changer de page et de rediriger l’internaute vers
l’url spécifiée par l’attribut href. C'est ce que JQuery appelle le comportement par défaut.
Si l'on veut ne pas déclencher cet événement par défaut, il suffit d'ajouter la ligne suivante à la fin1 du
gestionnaire d'événement :

return e.preventDefault();

Afin d’illustrer le comportement par défaut, lors du clic, le message s’affiche et l’internaute est redirigé
vers une autre page (cette indiquée par l’attribut href) :

clic me

      $(document).ready(function(){
            $("a").click(function(e){
                  alert("Vous avez cliqué sur un lien, à bientôt");
            });
      });

En utilisant le preventDefault, l’action par défaut n’a pas lieu :

clic me

      $(document).ready(function(){
            $("a").click(function(e){
                  alert("Vous avez cliqué sur un lien, mais vous resterez ici");
                  return e.preventDefault();
            });
      });

La page suivante permet de tester ce comportement :
http://www.action-creation.fr/cnam/nfa074/chapitre4/exemple3.html

1
 Le mot-clé return est à placer à la fin de la définition de la fonction. En effet, il permet à la fonction de
se terminer en envoyant une valeur au gestionnaire d’événement afin que ce dernier sache de ne pas
déclencher le comportement par défaut.
                                                                                                  Décembre 2015
2.5.2.2.     Stop propagation

Un événement se propage automatiquement. Par exemple, si vous entrez le curseur de la souris dans
une case d’un tableau, les événements suivants sont déclenchés de fils en père :
   - Evénement mouseover sur la case du tableau (td),
   - Evénement mouseover sur la ligne du tableau (tr)
   - Evénement mouseover sur le tableau (table)
   - Evénement mouseover sur le div qui contient le tableau
   - …
   - Evénement mouseover sur le document

Pour éviter ceci, il convient de bloquer cette répercussion en appliquant la fonction stopPropagation()
à l’événement. Ceci peut être fait en début de fonction, le plus top étant le mieux. Voici un petit
exemple :

$(document).ready(function(){
      $("td").mouseover(function(e){
            e.stopPropagation();

        });
});

La page suivante permet de tester ce comportement avec des divs imbriqués :
http://www.action-creation.fr/cnam/nfa074/chapitre4/exemple4.html
Dans cet exemple, tous les blocs propagent le mouseover sauf le bloc noir. A chaque mouseover
déclenché, un message donne la classe du bloc. Vous pouvez fermer ce message sans bouger la souris,
en actionnant la touche « entrée ».

          2.5.2.3.     this
Dans la fonction de gestion des événements, nous avons la possibilité de considérer directement
l’élément sur lequel l’action a été déclenchée à l’aide de $(this), comme le montre l’exemple suivant,
qui modifie uniquement le style de l’image sur laquelle on a cliqué :

$(document).ready(function(){
      $("img").click(function(){
            $(this).css("border","3px solid #ff0000");
      });
});

Cet exemple est en fait l’exemple 1, présenté au tout début de ce chapitre.

Chapitre 4 : Javascript et jQuery                                                                19 / 46
2.5.3. Evénements clavier
                                Action                                      Fonction
 une touche du clavier est enfoncée                                  keydown()

 une touche du clavier est maintenue enfoncée                        keypress()

 une touche du clavier est relâchée                                  keyup()

Dans le cas des événements clavier, le code de la touche en question est disponible en tant que paramètre de
la fonction définie en ligne.

Exemple :

$("header").keyup(function(touche){
      // on affiche une première alertes
      alert("Vous venez d'appuyer sur la touche Entrée !");
      /* ainsi qu’une seconde
      alerte avec le numéro de touche */
      alert(touche);
});

L’exemple ci-dessus illustre définition d’une fonction en ligne contenant un paramètre (touche) ainsi que le
fonctionnement des commentaires en javascript. Le double slash (//) pour commenter la suite de la ligne, ou le
commentaire avec début (/*) et fin (*/).

Evénements formulaire

              Action                              Fonction

 Focalisation                      focus()

 Sélection (p.e. dans une liste)   select()

 Changement de valeur              change()

 Envoi du formulaire               submit()

Exercice 4 :
Reprenez l’exercice ci-dessus avec un div et un formulaire. Si l’on clique que le div, il disparait et le
formulaire apparait. Lors du clic sur le bouton de validation du formulaire, ce formulaire s’efface et le
div s’affiche.

                                                                                                     Décembre 2015
2.6. Exercices
Exercice 5 : Créez un texte qui s'agrandit au clic. Si on reclique dessus, il reprend sa taille d'origine.

Exercice 6 : Créez une page contenant plusieurs paragraphes, lors du clic sur un paragraphe, il se met en
gras.

Exercice 7 : Créez 5 boutons et un rectangle. Chaque bouton provoque une action sur le rectangle :

    -    Bouton 1 : règle la hauteur du rectangle à 500px
    -    Bouton 2 : met le rectangle en vert
    -    Bouton 3 : remet les couleurs initiales
    -    Bouton 4 : fait disparaître le rectangle
    -    Bouton 5 : fait réapparaître le rectangle

Exercice 8 : Reprenez l’exemple 1 pour que seule l’image sur laquelle on vient de cliquer soit affublée d’une
bordure.

Exercice 9 : Créer un rollover sur une image en la remplaçant par une autre image.

Exercice 10 : Créer un rollover sur du texte ; lors du passage de la souris, le texte est modifié.

Exercice 11 : Créer un effet sur un texte :
   • Il s'affiche en gras en cas de clic
   • Il s'affiche en italique en cas de double-clic

Exercice 12 : Créer une page web comportant une phrase, dont un groupe de mots, de couleur noire au
chargement, doit prendre la couleur :
   • rouge (#ff0000) au passage de la souris ;
   • vert (#009900) en réponse à un click ;
   • bleu (#0000ff) en réponse à un double click.

Exercice 13 : Créer une page web constituée d'un court paragraphe (quelques lignes), d'une largeur de 500
pixels. En cliquant sur ce paragraphe, il doit s'afficher grosso-modo au centre de la page, avec un mot par ligne.
Le double click doit permettre de revenir au format initial (aligné à gauche, occupant une largeur de 500 pixels).

Exercice 14: Créer un rollover sur du texte ; lors du passage de la souris, le texte subira les changements
suivants :
    • police Verdana ;
    • un trait en travers des lettres (line-through) ;
    • une multiplication par 2 de la hauteur des lignes ;
    • une multiplication par 1,5 de la taille des caractères par rapport à la taille par défaut ;
    • une capitalisation des premières lettres des mots.

Exercice 15 : Créer un menu horizontal avec un effet rollover en javascript.

Exercice 16 : Créer un boite dont seule la première ligne s'affiche et mais qui s'agrandit à 300px de haut si l'on
double clic sur le titre.

Exercice 17 : Créer deux boites :
   • La seconde ne s'affiche pas.
   • La première est le titre, si l'on double clic dessus, la seconde boite s'affiche.
   • Lors du clic sur la seconde boite, elle disparait.

Exercice 18 : Créer une pop-in qui s'ouvre lors d'un clic sur un lien.

Chapitre 4 : Javascript et jQuery                                                                            21 / 46
3.       Variables, chaines de caractère, et structures de
         sélections

   3.1. Les variables
Une variable est un élément primordial en Javascript, comme dans tous les langages. Une variable permet
de conserver des données au cours de l’exécution et donc des différentes lignes de Javascript. Une
variable peut être un nombre entier ou flottant (avec virgule), un tableau, un caractère, une fonction
(comme on a pu en définir en ligne précédemment) ou même une chaine de caractère (nous en avons
manipulé dans la partie précédente). Voici un exemple de variable de type chaine de caractère :

var maVariable = ".normal" ;

Nous avons donc créé une variable du nom de maVariable à l’aide du mot clé var. Nous avons aussi
affecté une valeur à cette variable à l’aide de l’opérateur = (égal). Dans cet exemple, la valeur de la
variable est .normale . Une fois crée, la variable peut être utilisée, comme paramètre dans la fonction
JQuery par exemple :

$(maVariable).show() ;

Précisons que le nom d’une variable est sensible à la casse (a n’est pas pareil que A), et ne peux contenir
que les lettres, des chiffres et des soulignés (_). Notons aussi qu’il est possible de déclarer une variable
sans lui donner de valeur (sans l’initialiser, ou sans la définir dirait-on) :

var maVariable2 ;

En cas d’utilisation d’une variable avant qu’elle soit
définie, elle aura la valeur undefined :

alert(maVariable2)

A tout moment, on peut modifier la valeur d’une variable, et même en changer le type :

var maVariable3 = "Bonjour " ;
maVariable3 = 25 ;

La fonction typeof() permet de connaitre le type
d’une variable

alert( typeof( maVariable3 ) );

                                                                                                 Décembre 2015
Nous devons nous rappeler que, contrairement à nous, l’ordinateur ne connaît que deux valeurs : 0 et
1. Un ordinateur ne compte qu’en binaire car chaque information est représentée par la présence (1) ou
l’absence (0) d’un courant électrique dans un de ses circuits électroniques.

Nous avons beaucoup plus de chance que lui car nous avons dix doigts ce qui nous permet de compter
en base 10, c’est à dire en utilisant 10 chiffres et non 2. De plus, nous sommes en mesure de manipuler
plusieurs types de valeurs, par exemple des lettres de l’alphabet, des couleurs, des notes de musique,
etc.

Notre ordinateur doit pour sa part associer une suite de chiffres binaires à toute information.

En réalité, le type associé à une information permet à l’ordinateur de nous la restituer dans une forme
plus naturelle pour nous. Par exemple la suite composée de 8 bits à 1, suivie de 16 bits à 0
(111111110000000000000000 soit FF0000 en hexadécimal) correspond à la couleur rouge dans le
modèle RGB utilisé par HTML et à la valeur entière 16711680 (255*16*16*16*16). Donc, en plus de la
valeur binaire, il nous faut mémoriser son type pour être en mesure de réaliser une interprétation
correcte de l’information. Heureusement pour nous, c’est l’ordinateur qui se chargera de faire toute les
conversions utiles.

   3.2. Les chaines de caractères
Une variable est de type String si elle contient une chaine de 0 à un nombre infini de caractères.
On déclare et définit des chaines de caractères comme ceci, la première version étant la plus
conventionnelle :

var chaineOne = new String("Ma chaine contient des choses");
chaineTwo = 'hé hé, ho ho !';
chaineTwo = 'vive l\'eau';
chaineTwo = "";

On notera l’utilisation des guillemets doubles ou simple en début et en fin de chaine. On notera
aussi l’utilisation du backslash pour définir des caractères spéciaux. En voici quelques-uns :

 Caractère spéciale                 Signification
 \n                                 Saut de ligne
 \'                                 Guillemets simple
 \"                                 Guillemets doubles
 \\                                 Backslash

On peut aussi concaténer (mettre les unes au bout des autres) des chaines à l’aide de
l’opérateur + (plus).

m = "Allez"+" l'OM";
n = m + ", oh ! oh ! oh !";

L’attribut length permet de connaitre la longueur d’une chaine de caractère

alert(m.length) ;

Certaines fonctions JQuery permettent de récupérer des chaines :

 Fonction           Exemple                              Description
 .val()             laVal = $("#input).val();            Récupère la       valeur    d’un    input     de
                                                         formulaire.

Chapitre 4 : Javascript et jQuery                                                                    23 / 46
.attr()         leLien = $("a#one).attr("href");   Récupère la valeur de l’attribut de
                                                    l’élément.
 .html()         contenu = $("div#t2).html() ;      Récupère le contenu HTML d’un élément
                                                    (avec les balises donc)
 .text()         $("div#t2).text() ;                Récupère le contenu texte d’un élément
                                                    (sans les balises donc)

Ces fonctions permettent de lire (récupérer) des chaines si elles sont utilisées comme décrit
ci-dessus. Utilisées autrement (avec un paramètre supplémentaire), elles permettent de
modifier (écrire) ces valeurs. On notera que pour lire une valeur, il faut nécessairement que la
sélection JQuery ne considère qu’un seul élément (ce qui n’est pas le cas pour une écriture).

Petit exemple d’utilisation :

     clic me
     
          $(document).ready(function(){
               $("a").click(function(e){

                       // affichage du lien
                       contenuLien = $(this).text();
                       alert("Vous avez cliqué sur "+contenuLien);

                       // modification du lien avec du code html
                       $(this).html("clic encore !");

                 });
          });
     
Exercice 19 : Ecrivez un album photo. Les photos sont toutes en miniature à gauche. La photo
sélectionnée au clic apparait en grand sur la droite. Pour trouver le nom de la grande image, il
suffit d’ajouter la chaine "big_" au début du nom de la petite image.

Exercice 20 : Reprenez l’exercice précédent, mais en replaçant les miniatures par des liens.

Exercice 21 : Ecrivez un formulaire avec deux input texte et un sélect. Lors de la validation,
une phrase est générée en intégrant les 3 champs de formulaire.

Exercice 22 : Créez un formulaire avec 3 boutons. Les deux premiers ajoutent une phrase
type à un div, le troisième ajoute une phrase récupérer dans un input du même formulaire.

La fonction replace s’applique à une chaine pour remplacer toutes les occurrences d’une sous-
chaine par une autre. Ces deux sous-chaines étant passées en paramètre. Exemple :

var str = "Allez Reims!";
var res = str.replace("Reims", "Sedan");
alert(res);

                                                                                     Décembre 2015
3.3. Les nombres
Une variable est de type Number si elle contient une valeur numérique, entière ou flottante
(avec une virgule, enfin un point chez les anglo-saxons). On déclare et définit des chaines de
caractères comme ceci, la première version étant la plus conventionnelle :

var test = new Number(123);
testTwo = -425;
test3 = 25.89;

Les opérations standard sont disponibles en Javascript. Le tableau suivant détaille ces
opérations :

 Opération              Exemple                Description
 +                      x = 12 + 8 ;           Addition
 -                      x = x – 1;             Soustraction
 *                      y = x * x * 3.14;      Multiplication
 /                      z = 8 / 12;            Division
 %                      re = y % 2;            Le modulo calcule le reste de la division entière

Si vous avez bien suivi, l’opérateur + (plus) est utilisé pour la concaténation des chaine ainsi que pour
l’addition de nombres. Il est donc important de savoir ce que vous souhaitez faire. Si le nombre est récupéré
dans un champ de formulaire, il sera considéré comme une chaine, et vous devrez le transformer en nombre
manuellement. Si vous souhaitez concaténer deux nombres, vous devrez les transformer en chaines :

Concaténation entre une chaine et un entier (transformé implicitement en chaine)

       var age2020 = $("#age2014").val() + 6 ;

Addition car la chaine est transformée (le mot adapté est castée) en nombre

       var age2020 = Number( $("#age2014").val() ) + 6 ;

       heure = 10 ;
       minute = 30 ;
       heureMinute = heure+minute ; // la variable vaut 40 !
       heureMinute = String(heure)+String(minute) ; // la variable vaut 1030

Chapitre 4 : Javascript et jQuery                                                                     25 / 46
Pour certains exercices, nous aurons besoin de générer des nombres de manière aléatoire, à l’aide de la
fonction Math.random(). Il s’agit en fait de la fonction random() de l’objet Math, mais peu importe. Cette
fonction ne prend pas de paramètre et retourne une valeur flottante entre 0 (inclus) et 1 (exclu).

En complément, la fonction Math.floor(val) renvoie la partie entière d’un flottant passé en paramètre.

Illustration :

       alert( Math.random()*12 ); // valeur flottante entre 0 (inclus) et 12 (exclu)

       alert(Math.floor( Math.random()*12) ) ;                // valeur entière de 0 à 11

Exercice 23 : Créer un formulaire avec deux champs et 5 boutons (un par opération). Lors de
l’utilisation des boutons, le résultat du calcul s’affiche dans un div dédié.
    A. Ajoutez ensuite un bouton pour inverser les valeurs des deux champs.
    B. Ajouter ensuite un bouton pour calculer la moyenne des deux champs.

Exercice 24 : Créer une page web permettant de générer un nombre aléatoire entre deux
valeurs entrés dans deux inputs d’un formulaire.

Comme dans d’autres langages, il existe des opérateurs spécifiques permettant de gagner du
temps :

 Opérateur                           Exemple                             Equivalent
                 +=                                i+=2;                           i = i+2;
                 -=                                 i-=2;                           i = i-2;
                 *=                                i*=2;                           i = i*2;
                 /=                                 i/=2;                         i = i / 2;
                 %=                               i%=2;                          i = i % 2;
                 ++                                  i++;                          i += 1;
                 --                                   i--;                          i -= 1;

                                                                                                 Décembre 2015
3.4. Les booléens
Une variable de type booléen a deux valeurs possibles : vrai (ou 1) et faux (ou 0).
On déclare et définit des booléens comme ceci, la première version étant la plus
conventionnelle :

       var condition = new Boolean(true);
       condition = new Boolean(0);      // false !
       condition2 = true;

Bien sûr, la valeur d’un booléen peut se calculer à l’aide de tests, afin de comparer les valeurs
de variables. Dans le tableau d’explication suivant, on considère que x est un entier qui vaut 5

       var x = 5;

 Opérateur                          Description           Exemple           Valeur
                                                          x == 5            vrai
 ==                                 Valeur égale          x == 8            faux
                                                          x == "5"          vrai *
 !=                                 Valeur différente     x != 8            vrai
                                                          x != 5            faux
                                                          x != "5"          faux *
 <                                  inférieur             x                                  supérieur             x>8               faux
 = 6            faux

* Comme vous pouvez le remarquer Javascript est assez permissif quand il compare car il se
limite aux valeurs. Si l’on souhaite être plus stricte, on va pouvoir comparer à la fois la valeur
et le type, en ajoutant un = (égal) supplémentaire, comme le montre le tableau suivant.

 Opérateur              Description                             Exemple           Valeur
 ===                    Egalité en valeur et en type            x === 5           vrai
                                                                x === "5"         faux
 !==                    Différence de valeur ou de type         x !== 5           faux
                                                                x !== "5"         vrai
                                                                x !== 5           vrai

Chapitre 4 : Javascript et jQuery                                                           27 / 46
De plus, on peut combiner des valeurs booléennes à l’aide d’opérateurs logiques. Dans le
tableau d’explication suivant, on considère que x et y sont des entiers qui valent 5 et 3.

    var x = 5;
    var y = 3 ;

Opérateur     Description                 Example                   Valeur
&&            et logique                  (x1)             Vrai
||            ou logique                  (x==6 || y==6)            faux
!             négation                    !(x==y)                   vrai

Pour combiner des booléens, on utilisera les parenthèses afin de ne pas rendre l’évaluation
ambiguë.

    var r = (a || b) && !(c || d) ;

                                                                                 Décembre 2015
3.5. Structures de sélection

Une première utilisation concrète des booléens se trouve avec la structure de sélection si / if.
Elle permet d’effectuer un ensemble d’instruction uniquement si la condition est vraie :

       if (condition) {
           /* Bloc d’instructions effectuées uniquement
            si la variable condition est vraie */
       }

Nous pouvons décrire le comportement quand une structure de sélection if est rencontrée par
la figure suivante :

                                            Evaluation de la condition

                                     Vrai                                Faux

                                                                                 ne
                          action 1

                          action 2
                                                                                rien
                              …
                                                                                faire
                         action 99

                                                suite des actions

Plusieurs remarques s’imposent :
          1.   La condition doit être de type booléen, c’est à dire n’admettre que deux valeurs
               possibles : vrai ou faux.
          2.   La condition peut prendre, par exemple, la forme d’une comparaison de deux
               expressions arithmétiques. Nous pourrons comparer la valeur d’une variable t
               avec la valeur 100 en nous assurant que ces deux expressions sont de même
               type.
          3.   Si l’évaluation est toujours fausse (1>2 par exemple), le bloc d’actions ne sera
               jamais exécuté.
          4.   L’objectif de la structure de sélection est d’autoriser un comportement différent
               de l’algorithme en fonction des valeurs des variables.

Exercice 25 : Reprenez l’exercice précédent en ajoutant un affichage spécifique si la valeur
aléatoire est plus grande que la valeur contenue dans un troisième input.

Chapitre 4 : Javascript et jQuery                                                         29 / 46
La version complète de la structure de sélection si admet aussi un sinon. Si la condition est
vraie une section de code est exécutée, sinon, une autre section est effectuée :

     if (condition){
         /* Bloc d’instructions effectuées uniquement
          si la variable condition est vraie */
     } else {
         /* Bloc d’instructions effectuées uniquement
          si la variable condition est false */
     }

Nous pouvons décrire le comportement quand une structure de sélection if/else est rencontrée
par la figure suivante :

                                      Evaluation de la condition

                               Vrai                                Faux

                                                                          action 101
                   action 1
                                                                          action 102
                   action 2
                                                                              …
                      …
                                                                          action 155
                  action 99

                                          suite des actions

A titre d’exemple, on peut vouloir déterminer le plus grande de deux valeurs :

     if(va>100){
         alert("La valeur a est plus grande que 100");
     } else {
         alert("La valeur a est plus petite ou égale à 100");
     }

Exercice 26 : Reprenez l’exercice 21 en ajoutant un champ select proposant deux choix. En
fonction de la valeur du sélect, le message est différent.

                                                                                       Décembre 2015
Pour être tout à fait complet, il est possible de chainer plusieurs structures de sélection if/else
afin de gérer des conditions multiples, comme le montre l’exemple ci-dessous :

       var rr= Math.random()*10;
       if( rr < 1 ){
           $("#message").text("C’est un très petit tirage");
       } else if( rr < 5 ){
           $("#message").text("C’est plus petit que la moyenne");
       } else if( rr == 5 ){
           $("#message").text("Bravo, c’est pile la valeur médiane");
       } else if( rr < 9 ){
           $("#message").text("C’est plus grand que la moyenne");
       } else {
           $("#message").text("C’est vraiment trop grand");
       }

Exercice 27 : Calcul du maximum de 3 valeurs

Ecrire les instructions javascript pour :
   • lire trois entiers dans 3 champs de formulaire ;
   • lors du clic, et si les champs sont remplis, détermine le plus grand des trois (plusieurs
       solutions possibles) ;
   • change le style du plus grand champ

Exercice 28 : Comparaison de deux dates

Créer un formulaire pour définir 2 dates (définies par 3 entiers : jour, mois et année), puis
affiche l’un (un seul) des 3 messages suivants lors du clic :
    • la première date est antérieure à la deuxième
    • la première date est postérieure à la deuxième
    • la première date est égale à la deuxième

Exercice 29 : Différence entre deux dates

Reprendre l’exercice précédent et dans le premier cas, calculer la différence entre la première
et la seconde date.
On considérera qu’un mois comporte systématiquement 30 jours.

Chapitre 4 : Javascript et jQuery                                                            31 / 46
Exercice 30 : Transport de marchandises

L’objectif de cet exercice est de calculer le coût du transport d’une marchandise en fonction de
son poids et de son volume.

Question 1 : Calcul du prix

Une marchandise peut être expédiée par avion (coût : 10 euro/kg), par bateau (coût : 6
euro/m3), ou par train (coût : 3 euro/kg + 2 euro/m3).

Proposez un formulaire avec un bouton qui permet de calculer le prix à payer pour un colis
dont le poids, le volume et le mode de transport sont saisis.

Question 2 : Calcul du mode de transport

Le choix du mode de transport peut maintenant être multiple (en fonction du trajet, certains
sont disponibles et d’autres non). Ainsi, nous avons les choix complémentaires suivants :
•     Avion ou bateau ;
•     Avion ou train ;
•     Avion, bateau ou train.

Modifiez le formulaire pour proposer, en fonction des modes de transports disponibles le moyen
de transport dont le coût est le moins élevé.

Exercice 31 : Le but de cet exercice est de deviner un nombre.

   1. Une valeur entière aléatoire est déterminée entre 0 et 1000 et conservée dans une
      variable.
   2. L’utilisateur propose une valeur dans un champ de formulaire
   3. Puis valide sa proposition à l’aide d’un bouton
   4. En fonction de la proposition et du nombre à deviner, une ligne vient s’ajouter dans un
      div spécifique en indiquant :
       • La valeur à deviner est plus petite
       • La valeur à deviner est plus grande
       • Bravo, vous avez trouvé la bonne valeur

Questions complémentaires :
  A. Une fois la valeur trouvée, la partie recommence : un nouveau nombre est calculé et le
      contenu du div est vidé
  B. Ajouter un compteur permettant de connaitre le nombre d’essais et un message
      indiquant ce nombre d’essais lors de la victoire.
  C. Au bout d’un certain nombre d’essais, le joueur a perdu et la partie recommence

                                                                                     Décembre 2015
Vous pouvez aussi lire