JQuery




         v 1.2
Votre formateur
        var formateur = {
           prenom : "Franck",
           nom : "SIMON",
           formation : "ingénieur",
           competences : ["Java","Java EE","C - C++", "web",
                         "Javascript","PHP","MySql","etc."],
           emploi : "consultant independant",
           email : "franck.simon@antislashn.org",
           web : "www.franck-simon.com"
        };


             http://www.linkedin.com/pub/franck-simon/49/584/b73
             http://www.viadeo.com/fr/profile/franck.simon16
             https://plus.google.com/u/0/103522587535315941799/posts
             @antislashn

antislashn.org                         JQuery                          2 / 128
jQuery
●    Objectifs de la formation
      ●    revoir les principes du Web 2.0
             –   JSON, Ajax
      ●    savoir utiliser les outils de debug des navigateurs
      ●    revoir les principes d'utilisation de JavaScript en
           programmation objet
      ●    revoir les principes de chargement du DOM
      ●    savoir utiliser jQuery




antislashn.org                      JQuery                       3 / 128
Web 2.0
●    Évolution conceptuelle du Web
      ●    expression inventée par Dal Dougherty, et reprise par
           Tim O'Reilly
             –   terme largement accepté maintenant
      ●    ensemble de techniques, fonctionnalités
      ●    objectifs
             –   utilisation plus naturelle du Web
             –   meilleurs expérience utilisateur
                  ●   fluidité de la navigation, attente minime, ...
             –   web social


antislashn.org                                    JQuery               4 / 128
Web 2.0
●    Application Web "traditionnelle"


                     URL : 1ére requête
                                           génération
                     envoi page complète     page
  affichage
    page              requête + données
                                           génération
                     envoi page complète     page
  affichage
    page              requête + données
                                           génération
  affichage          envoi page complète     page
    page




antislashn.org                  JQuery          5 / 128
Web 2.0
●    Application Web 2,0


                    URL : 1ére requête
                                          génération
                    envoi page complète     page
  affichage
    page            requête + données
                                          génération
                    envoi données          données
  injection
  données           requête + données
                                          génération
  injection         envoi donnée           données
  données




antislashn.org                 JQuery          6 / 128
Web 2.0
●    Le Web 2.0 est donc un mode de développement
     des sites web
      ●    une page est envoyée à la première connexion
             –   avec fichiers CSS et JavaScript
      ●    chaque action de l'utilisateur sur la page provoque des
           demande de au serveur
             –   le serveur ne renvoie que des données
                  ●   pas de page complète à envoyer
      ●    nécessite une fonctionnalité spécifique qui permet au
           navigateur de faire ds requêtes au serveur via
           JavaScript
             –   l'objet XMLHttpRequest
antislashn.org                               JQuery           7 / 128
Deboguer JavaScript
●    Tous les navigateurs actuels fournissent nativement
     ou par plugin des outils de debug
      ●    suivi des requêtes, avec temps de réponse
      ●    console de log JavaScript
             –   avec
      ●    affichage du DOM, des CSS, etc.
●    Ces outils ne sont pas activés par défaut
      ●    il faut d'abord charger l'éventuel plugin
      ●    puis activer l'outil de debug


antislashn.org                      JQuery             8 / 128
Deboguer JavaScript
●    Deboguer avec IE
      ●    IE est livré avec des outils de debug
      ●    activation par le menu Outils de développement
             –   touche F12




antislashn.org                     JQuery             9 / 128
Deboguer JavaScript
●    Console IE




antislashn.org    JQuery   10 / 128
Deboguer JavaScript
●    Deboguer avec Firefox
      ●    ajouter le plugin Firebug
             –   menu Modules complémentaires




antislashn.org                     JQuery       11 / 128
Deboguer JavaScript
●    Deboguer avec Firefox
      ●    installer FireBug
      ●    puis dans le menu Développement Web, activer les
           outils




antislashn.org                  JQuery                  12 / 128
Deboguer JavaScript
●    Console de FireBug
      ●    bien noter qu'il existe la console par défaut et la console
           de FireBug




antislashn.org                      JQuery                      13 / 128
Deboguer JavaScript
●    Deboguer avec Google Chrome
      ●    ajouter via Chrome Web Store le plugin FireBug Lite
      ●    activer le mode développeur dans le extensions
             –   menu Outils … Options




antislashn.org                     JQuery                   14 / 128
Deboguer JavaScript
●    Deboguer avec Google Chrome
      ●    activer le mode développeur
             –   menu Outils … Outils de développement




antislashn.org                     JQuery                15 / 128
Deboguer JavaScript
●    Console de Google Chrome




antislashn.org           JQuery   16 / 128
Deboguer JavaScript
●    Si la console est supportée par le navigateur
      ●    vous pouvez utiliser l'objet console
                      console.log("Hello");
                      console.error("ERREUR");
      ●    si la console n'existe pas, vous pouvez l'émuler par un
           affichage dans des balises div sur votre page
if(!console)
{
   console = {};
   console.log = function(message){
      document.getElementById("__console_log__").innerHtml += message;
   }
   console.error = function(message){
   document.getElementById("__console_error__").innerHtml += message;
   }
}

antislashn.org                      JQuery                      17 / 128
JSon
●    JSon : JavaScript Object Notation
      ●    format d'échange humainement compréhensible
      ●    RFC 4627
      ●    souvent utilisé pour la sérialisation et la transmission
           d'objets
      ●    la fonction eval() de JavaScript permet ensuite
           d'évaluer la chaîne de caractères JSon
                                                            json_1.html
 var r = eval("2+2");
 console.log(r);
 var json = '{civilite:"M",...,adresse:{rue:"Rue de Bruxelles",...}}';
 var obj = eval("("+json+")");
 console.log(obj.adresse.ville);


antislashn.org                      JQuery                         18 / 128
JSon
●    Syntaxe de base
      ●    cf le site de référence http://www.json.org/




antislashn.org                      JQuery                19 / 128
POO et JavaScript
●    JavaScript offre un support limité des concepts
     objets
      ●    la classe en tant que telle n'existe pas
             –   le mot clé class est réservé mais n'est pas utilisé
      ●    la programmation est orienté prototype
             –   le prototype est un objet permettant la création d'autres objets
                 par clonage
      ●    la POO en JavaScript se base sur les mécanismes de
             –   prototype
             –   function
             –   concept de closure (fermeture)

antislashn.org                            JQuery                           20 / 128
POO et JavaScript
●    Tout est objet en JavaScript
      ●    sauf null et undefined
●    JavaScript utilise deux types d'objets
      ●    les objets natifs (Native Object)
      ●    les objets du conteneur d'exécution (Host Object)
●    Les objets natifs utilisent des collections
     dynamiques de propriétés
      ●    contient un référence vers un autre objet, null ou
           undefined
      ●    la fonction delete permet de supprimer un propriété
antislashn.org                      JQuery                      21 / 128
POO et JavaScript
●    Création d'une classe
      ●    les classe sont définie via des fonctions
                   function foo(){
                      var message = "Hello";
                      this.getMessage = function(){
                         return message;}
                      alert(message);
                   }

      ●    le mot clé new permet de créer une instance
                    var f = new foo();
                    alert(f.getMessage());




antislashn.org                       JQuery              22 / 128
POO et JavaScript
●    Dans l'exemple de la page précédente
      ●    foo est une fonction, foo peut-être vu comme une
           classe
      ●    l'instanciation par new va :
             –   exécuter la fonction
             –   créer un espace de stockage pour les variables locales
                 stockées dans la fonction
                  ●   la variable message est "privée" à la classe
                  ●   la méthode getMessage est ajoutée à l'instance
                        – this référencie l'objet lui-même
                  ●   alert() est exécuté



antislashn.org                                JQuery                      23 / 128
POO est JavaScript
●    Contexte d'exécution des fonctions
      ●    le mot-clé this dans un contexte non objet fait
           référence à window
             –   si la fonction foo est exécutée en tant que fonction,
                 getMessage est ajouté à window
                  ●   this fait référence à window
                            foo();
                            alert(window.getMessage());
             –   si une instance de foo est créée, this fait référence à l'objet
                 créé
                  ●   getMessage devient une méthode de foo
                            var f = new foo();
                            alert(f.getMessage());

antislashn.org                                JQuery                      24 / 128
POO et JavaScript
●    Le type natif Object est une collection de
     propriétés
●    Les propriétés sont crées dynamiquement lors de
     l'assignation d'une valeur
      ●    la propriété est mise à jour si elle existe
                      var o = new Object();
                      o.couleur = "vert";
                      console.log(o.couleur);
                      console.log(o['couleur']);




antislashn.org                       JQuery              25 / 128
POO et JavaScript
●    Par défaut Object ne possède que la propriété
     prototype
      ●    prototype est de type Object
      ●    une fonction est aussi de type Object
●    La programmation par prototype ne fait pas la
     distinction entre une propriété de type donnée ou
     code
      ●    la structure de l'objet peut changer dynamiquement



antislashn.org                    JQuery                    26 / 128
POO et JavaScript
●    Évaluation d'une propriété par l'interpréteur :
      ●    l'interpréteur vérifie si la propriété existe au sein de
           l'objet
      ●    si la propriété n'existe pas l'interpréteur la recherche
           auprès du prototype
             –   le prototype étant un objet il possède lui-même un prototype
             –   l'interpréteur interroge la chaîne des prototypes jusqu'à ce qu'il
                 trouve la propriété ou que le chaînage des prototypes soit fini




antislashn.org                             JQuery                           27 / 128
POO et JavaScript
                                                  prototype.html
                 function Toto(val){
                    this.valeur = val;
                 }

                 function Titi(message){
                    this.message = message;
                 }

                 Titi.prototype = new Toto(15);

                 var o = new Titi("Hello");
                 console.log(o.valeur);
                 console.log(o.message);




antislashn.org                           JQuery                    28 / 128
POO et JavaScript
●    Il est courant d'utiliser un objet littéral pour créer un
     espace de nommage
      ●    évite les collisions de nommage
      ●    n'est pas une spécification
      ●    n'est pas un package
                                                             namespace.html
                 var antislashn = {};
                 antislashn.Personne = function(n){
                    var nom = n;
                    this.getNom = function(){return nom};
                 }

                 var p1 = new antislashn.Personne("Titi");
                 var p2 = new antislashn.Personne("Toto");
                 console.log(p1.getNom());
                 console.log(p2.getNom());

antislashn.org                            JQuery                              29 / 128
POO et JavaScript
●    Une closure (fermeture) est formée par le retour
     d'un objet de type function
      ●    cet objet ayant été créé dans le contexte d'exécution
           lors de l'appel de la fonction externe
             –   on peut donc le voir comme une fonction interne à une fonction

          function foo(nb){
             function add(val){
                 return nb+val;
             }
             return add;
          }

          var f = foo(10);
          console.log(f(5));


antislashn.org                           JQuery                         30 / 128
DOM
●    Document Object Model
      ●    représentation objet sous forme d'arbre
●    Recommandation du W3C
      ●    décrit une interface (API) indépendante de tout langage
           permettant de parcourir et mettre à jour la structure du
           document
●    DOM navigateur
      ●    historiquement permet de manipuler les éléments
           "importants" d'une page HTML
             –   formulaires, images, etc
             –   mais pas les div, h, ...
antislashn.org                              JQuery            31 / 128
DOM
●    Le DOM de niveau 2 permet de parcourir tout les
     éléments du document HTML
      ●    entre autre par getElementById sur l'objet document
      ●    l'objet document possède aussi
             –   createElement, createTextNode, createAttribute, …
      ●    méthodes pour manipuler un nœud
             –   appendChild, insertBefore, replaceChild,
                 cloneNode, …
      ●    méthodes pour naviguer dans le DOM
             –   parentNode, childNodes, firstChild, lastChild, ...


antislashn.org                       JQuery                    32 / 128
DOM
●    Attention au différences entre navigateurs
      ●    certains navigateurs ajoutent des nœuds de type texte
●    Un nœud est de type Element, et possède les
     propriétés
             –   nodeType : type de nœud (entier)
             –   nodeName : nom du nœud
             –   nodeValue : valeur du nœud (ou null)
             –   attributes : tableau des attributs (ou null)
●    JQuery facilitera le recherche dans le DOM


antislashn.org                          JQuery                  33 / 128
Gestion des événements
●    Un événement est un changement d'état de
     l'environnement qui peut-être intercepté par
     JavaScript
      ●    clic sur un élément, clavier, souris, survol, …
●    Un objet Event est créé par le navigateur
      ●    objet global sous IE, ou passé à la fonction de gestion
           de l'événement dans les autres navigateur
      ●    les propriétés de l'objet Event décrivent l'événement
             –   source, cible, etc,



antislashn.org                         JQuery                 34 / 128
Gestion des événements
●    Principales propriétés de l'objet Event
      ●    target : cible de l'événement
             –   srcElement sous IE
      ●    type : type d'événement
             –   focus, load, click, …
      ●    stopPropagation : stoppe la remontée de l'événement
             –   cancelBubble sous IE
      ●    preventDefault : annule les actions implicites sur les
           événements
             –   submit par exemple
      ●    currentTarget : nœud sur lequel se trouve l'événement
           lors de sa capture
antislashn.org                           JQuery               35 / 128
Gestion des événements
●    La gestion des événements est différente selon les
     navigateurs
●    Un bonne pratique est de mettre la gestion des
     événements hors du code HTML
      ●    ne pas employer l'attribut onClick par exemple
      ●    le code est alors très différents entre IE et Mozilla
●    JQuery permet de standardiser le code de gestion
     des événements



antislashn.org                      JQuery                         36 / 128
XMLHttpRequest
●    Permet d'envoyer une requête HTTP vers le
     serveur et d'en contrôler la réception
      ●    la récupération d'une instance de XHR diffère selon les
           navigateurs
             –   avec IE 6 et moins :
                       var xhr = new ActiveXObject("Microsoft.XMLHTTP");

             –   avec IE 7 + et les autres navigateurs
                       var xhr = new XMLHttpRequest();

      ●    l'utilisation de l'objet est ensuite homogène


antislashn.org                            JQuery                           37 / 128
XMLHttpRequest
●    Les étapes d'utilisation de XHR
      ●    récupérer une instance de XMLHttpRequest
      ●    brancher une fonction de surveillance de la réponse sur
           l'événement onreadystatechange
      ●    ouvrir la connexion vers la ressource
             –   méthode open(...)
      ●    envoyer la requête
             –   méthode send(...)
      ●    surveiller l'état de la réponse dans la fonction callback
      ●    traiter la réponse lorsque celle-ci est valide
             –   propriété responseText ou responseXML

antislashn.org                         JQuery                          38 / 128
XMLHttpRequest
●    Exemple de code (extrait)
                                                   Complétion/index.jsp
    function recupererXMLHttpRequest()
    {                                                Fonction retournant un objet
       if (window.XMLHttpRequest) {                  XHR, ou null s'il n'existe pas
          return new XMLHttpRequest();
       } else if (window.ActiveXObject) {
          return new ActiveXObject("Microsoft.XMLHTTP");
       }
       return null;
    }
                                                         variable définie pour la page,
                                                         contenant une instance XHR
    function executeRequete(url,fonction) {
       if (xhr) {                                              fonction callback
          xhr.onreadystatechange = fonction;
          xhr.open("GET", url, true);
          xhr.send(null);
       }                                                 ouverture de la ressource en
                                                         mode asynchrone
    }

antislashn.org                            JQuery                                          39 / 128
XMLHttpRequest
●    Exemple de code (extrait)
      ●    fonction callback
                                                                      Complétion/index,jsp
    function majListeVille()                  vaut 4
    {
       var rep = "";                                     on vérifie la validité de la
       if (xhr.readyState==READY_STATE_COMPLETE          réponse
                      && xhr.status == 200){
                                                     réponse du serveur
          rep = xhr.responseText;
          document.getElementById('liste_villes').innerHTML =
               "<select onclick='majChamps(this)'>"+rep+"</select>";
       }
    }




antislashn.org                              JQuery                                    40 / 128
CSS – modèle en boite
●    Chaque élément HTML est représenté par une boite
      ●    les valeurs de hauteur (height) et largeur (width) sont
           celles du contenu (content)




antislashn.org                      JQuery                     41 / 128
jQuery – introduction
●    JQuery est un framework open source
      ●    écrit en JavaScript
      ●    utilisé côté client
●    Développé à l'origine par John RESIG
      ●    première version en 2006
●    Projet soutenu par une communauté nombreuse
●    Utilisé par de nombreux grands groupes
      ●    IBM, Google,


antislashn.org                   JQuery       42 / 128
jQuery - introduction
●   jQuery est un ensemble de fonctionnalités
    JavaScript permettant de manipuler le DOM d'une
    page HTML
      ●   site de référence : jquery.com
      ●   la bibliothèque est disponible sous la forme d'un simple
          fichier .js
            –    compressé ou non
            –    peut aussi être remplacée par un lien vers Google
      <script type="text/javascript"
            src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js">
      </script>




antislashn.org                           JQuery                           43 / 128
jQuery - introduction
●    Principales fonctionnalités
      ●    parcours et modification du DOM
      ●    gestion des événements
      ●    effets et animations
      ●    manipulation de CSS
      ●    usage facilité d'AJAX
      ●    ajout de fonctionnalités par plugins
      ●    divers utilitaires



antislashn.org                     JQuery         44 / 128
jQuery - introduction
●    La documentation jQuery est très explicite, avec de
     nombreux exemples
      ●    http://jquery.com/
      ●    quelques exemples de base sont disponibles à l'adresse
           http://docs.jquery.com/Tutorials:Live_Examples_of_jQuery




antislashn.org                      JQuery                     45 / 128
jQuery – the big picture




antislashn.org     JQuery   46 / 128
jQuery - bases
●    jQuery repose sur une seule fonction
      ●    jQuery() ou plus simplement $()
             –   admet des paramètres qui peuvent être
                  ●   une fonction qui sera exécutée lorsque le DOM sera chargé
                  ●   une chaîne de caractères appelée "query" qui permettra de sélectionner des
                      nœuds du DOM
             –   retourne un résultat : objet jQuery
                  ●   ce qui permet de chaîner les appels de méthode
●    Un query peut correspondre à
      ●    un sélecteur CSS
      ●    un sélecteur XPath
      ●    un sélecteur jQuery

antislashn.org                                    JQuery                                  47 / 128
jQuery - bases
●    Classiquement les développement JavaScript font
     appels à window.onload = function(){...} ;
      ●    l'événement sera déclenché lorsque toute la page aura
           été chargée
             –   html, images, css, …
●    L'utilisation de jQuery permet de lancer la fonction
     dès que le DOM est prêt
                    $(document).ready(function(){
                        console.log("boujour document");
                    });




antislashn.org                                JQuery        48 / 128
jQuery – les bases
●    Le sélecteur $(this) correspond à l'objet en cours
     de manipulation
●    Un grand nombre de méthodes de jQuery accepte
     une fonction comme paramètre
      ●    souvent ces fonctions reçoivent des paramètres
           positionnés par jQuery
             –   comme each() ou addClass()
      ●    il est possible d'utiliser $(this) dans ces fonctions
           pour travailler sur l'élément courant



antislashn.org                     JQuery                     49 / 128
jQuery - bases
●    Une bonne pratique de codage JavaScript se doit
     de séparer la partie HTML de la partie JavaScript
      ●    par de JavaScript dans les balises au niveau des
           attributs d'événements
●    Utiliser jQuery avec $(document).ready()
     permet de simplifier le suivi de cette bonne pratique
      ●    peut être simplifié en
                   $(function(){
                       console.log("bonjour jQuery");
                   });


             –   mais moins parlant
antislashn.org                             JQuery             50 / 128
jQuery - bases
●   Exemple de base                                        jQuery 01 – Base/exemple_01.html
      <html>
          <head>
          <title>Formation jQuery</title>
          <style type="text/css">
              #box{
                   color: red;
                   font-size: xx-large;
              }
          </style>
          <script type="text/javascript" src="jquery.js"></script>
          <script type="text/javascript">                             exécuté lorsque le DOM sera
              $(document).ready(function(){                           chargé
                   $("#box").click(function(){
                       console.log($("#box").text());
                   });                                           défini la fonction qui sera invoquée
              });                                                lorsque l'utilisateur cliquera sur
          </script>                                              l'élément
          </head>
          <body>                               sélectionne l'élément dont
              <div id="box">Bonjour</div>      l'id est box (sélection CSS)
          </body>
      </html>

antislashn.org                                    JQuery                                       51 / 128
jQuery – les sélecteurs de base
●    Fonctionnalité la plus importante de jQuery
●    Notation très concise
      ●    cf. http://www.codylindley.com/jqueryselectors/
●    Les sélecteurs de base correspondent aux
     fonctions getElementById et
     getElementsByTagName
      ●      $("#box")   sélectionne l'élément selon sont id
      ●      $("div")    sélectionne tous les éléments de type <div>



antislashn.org                        JQuery                   52 / 128
jQuery – les sélecteurs de base
●    Sélection par la classe                   $(".menu")

      ●    sélectionne tous les éléments de classe CSS menu
●    Les sélections peuvent être cumulées au sein d'un
     même appel à la fonction jQuery
                      $("box, div, .menu")

      ●    sélectionnera
             –   l'élément identifié par box
             –   toutes les balises <div>
             –   tous les éléments de classe CSS menu


antislashn.org                               JQuery         53 / 128
jQuery – les sélecteurs de base
●    Sélection hiérarchique
      ●    comme avec CSS (http://reference.sitepoint.com/css/generalsiblingselector)
      ●    $("#box p")sélectionne tous les descendants <p> de
           l'élément identifié par box
      ●               sélectionne tous les <p> immédiats
           $("#box > p")

           contenus dans l'élément identifié par box
      ●    $("#box ~ p") sélectionne tous les <p> frères de l'élément
           identifié par box
      ●    $("#box ~ p")sélectionne le <p> frère immédiat de
           l'élément identifié par box

antislashn.org                               JQuery                                 54 / 128
jQuery – sélection par filtres
●     $("li:first")   sélectionne le premier élément de la
     liste <li>
●     $("li:last")    sélectionne le dernier élément de la
     liste <li>
●     $("li:even") sélectionne les éléments pairs de la
     liste <li> - index commence à 0
●     $("li:odd")  sélectionne les éléments impairs de la
     liste <li> - index commence à 0
●     $("li:eq(3)")sélectionne le troisième élément de la
     liste <li> - index commence à 0
antislashn.org                   JQuery                 55 / 128
jQuery – sélection par filtres
●     $("li:gt(2)")sélectionne les éléments suivant l'index
     2 de la liste <li> - donc à partir du 4ème éléments
●     $("li:lt(2)")sélectionne éléments dont l'indice est
     inférieur à 2 de la liste <li> - donc les 2er éléments
●     $(":header")     sélectionne toutes les balises <h>
●                      sélectionne tous les éléments de
      $("li:not(li:eq(1))")

     la liste <li>, sauf celui d'indice 1
      ●    on peut cumuler les exclusions   $("li:not(:first,:last)")




antislashn.org                    JQuery                           56 / 128
jQuery – sélection par filtres enfants
●                     sélectionne les premiers éléments
      $("ul:first-child")

     fils <li> de tous les <ul>
●                    sélectionne les derniers éléments
      $("ul:last-child")

     fils <li> des <ul>
●
                     sélectionne tous les 2ème éléments
      $("li:nth-child(2)")

     fils – ne commence pas à 0
      ●    la valeur peut être remplacée par odd ou even
●                    sélectionne tous les éléments qui
      $("p:only-child")

     sont enfants uniques de leur parent <p>

antislashn.org                    JQuery                   57 / 128
jQuery – sélection par filtre de contenu
●                        sélectionne les <div> qui
      $("div:contains('toto')")

     contiennent le texte 'toto'
●     $("div:empty") sélectionne les <div> qui n'ont pas
     de de contenu (pas d'enfants ni de texte)
●     $("div:parent")  sélectionne les <div> qui sont
     parents (qui ont des enfants et/ou du texte)
      $("div:has(p)")
●                  sélectionne les <div> qui
     possèdent au moins un enfant <p>


antislashn.org                    JQuery             58 / 128
jQuery – sélection par filtre de visibilité
●     $("div:visible")   sélectionne les <div> qui sont
     visibles
●     $("div:hidden")    sélectionne les <div> qui sont
     cachés




antislashn.org                  JQuery                59 / 128
jQuery – sélection par filtre d'attribut
●    L'attribut est manipulé par [attr]
      ●    jusqu'à la version 1.3, il l'était par [@attr]
●     $("div[id]")      sélectionne les <div> possédant un id
●    Il est possible de sélectionner les attributs ayant (ou
     non) une certaine valeur
      ●    $("div[name='adresse']")   sélectionne les <div> dont l'attribut
           name vaut 'adresse'
      ●    de manière générale la forme est [attr OP valeur]
             –   les opérateurs OP sont détaillées page suivante


antislashn.org                           JQuery                     60 / 128
jQuery – sélection par filtre d'attribut
●    Opérateurs
      ●    = : égalité
      ●    != : différent
      ●    ^= : commence par
      ●    $= : finit par
      ●    *= : contient
●    On peut filtrer sur plusieurs attributs
      ●                               retrouve les <input> ayant
           $("input[id][name='adresse']")
           un id et dont le name vaut 'adresse'

antislashn.org                              JQuery          61 / 128
jQuery – méthodes utilitaires
●
     $.each(collection,callback(index,value)) :
     applique une fonction sur chaque élément de la
     sélection
●
     data(key,value) : associe une paire clé/valeur à
     un élément sélectionné
●
     data(key) : lit une valeur par sa clé sur l'élément
     sélectionné
●    cf. http://api.jquery.com/category/utilities/



antislashn.org                 JQuery                62 / 128
jQuery – gestion des attributs
●    attr() possède plusieurs signatures permettant
      ●    de connaître la valeur d'un attribut          $(this).attr('name')

      ●    de changer la valeur d'un attribut          $(this).attr('name','toto')

      ●    de changer la valeur de plusieurs attributs
             –   la collection est alors passée sous la forme d'un objet JSon
      ●    de changer l'attribut à l'aide d'une fonction
             –   les paramètres reçus sont l'indice de l'élément et la valeur de
                 l'attribut




antislashn.org                            JQuery                           63 / 128
jQuery – gestion des attributs
●    Exemple d'utilisation de attr()
                                                      jQuery 02 – CSS/attr.html
        function attrLecture(){
           alert($("#b1").attr('type'));
        }

        function attrEcriture(){
           $("li:first").attr('value','premier');
        }

        function attrMap(){
           $("li:eq(1)").attr({value:'deuxième',id:'li2'});
        }

        function attrFonction(){
           $("li").attr('value',function(index, value){
                                      if(index>1)
                                          return "item "+index;
                                  });
        }
antislashn.org                             JQuery                                 64 / 128
jQuery – gestion des attributs
      ●    removeAttr() supprime un attribut
      ●    val() retourne la valeur (attribut value) d'un élément
             –   permet aussi de changer la valeur, deux signatures
                  ●   paramètre correspondant à la nouvelle valeur
                  ●   fonction retournant une valeur et prenant en paramètre l'indice de
                      l'élément dans une collection et sa valeur
●    Les attributs de classe CSS seront vus plus loins
●    Attention : jQuery évolue, en fonction des versions,
     attr() peut renvoyer une String ou un Boolean
      ●    sur une propriété checked d'un checkbox par exemple
             –   cf. http://api.jquery.com/prop/

antislashn.org                                  JQuery                               65 / 128
jQuery – contenu d'un élément
●    La méthode text() permet de lire et modifier le contenu
     d'un élément sous forme textuelle
      ●    text() : lit le contenu texte d'un élément et de ces
           descendants
      ●    text(textString) : met à jour le contenu d'un élément
      ●    text(function(index,text)) : met à jour le contenu
           d'un élément par une fonction recevant l'indice de l'élément
           dans la collection et sa valeur actuelle
      ●    si des balises sont incluses dans les mises à jour, les
           marques de balisage < et > seront transformés en entité
           &lt; et &gt;


antislashn.org                       JQuery                       66 / 128
jQuery – contenu d'un élément
●    La méthode html() permet de lire et modifier le contenu
     HTML d'un élément
      ●    html() : lit le contenu texte d'un élément et de ces
           descendants
      ●    html(htmlString) : met à jour le contenu d'un élément
      ●    html(function(index,html)) : met à jour le contenu
           d'un élément par une fonction recevant l'indice de l'élément
           dans la collection et sa valeur actuelle
      ●    cette méthode utilise la propriété innerHTML des
           navigateurs



antislashn.org                       JQuery                       67 / 128
JQuery – gestion des CSS
●    Différentes méthodes permettent de gérer les
     feuilles de style
      ●    addClass : ajout d'une ou plusieurs classes
             –   si plusieurs classes sont ajoutée, elles sont séparées par un
                 espace
             –   une fonction peut être utilisée pour retourner une ou plusieurs
                 classes, cette fonction reçoit l'indice de l'élément et le nom des
                 classes de cet élément
      ●    removeClass : suppression d'une ou plusieurs
           classes
             –   mêmes paramètres possibles que addClass


antislashn.org                             JQuery                           68 / 128
jQuery – gestion des CSS
●    Exemple addClass et removeClass
                                                    jQuery 02 – CSS/addRemoveClass.html
                 $(document).ready(function(){
                       $("li").mouseover(function(){
                             $(this).addClass("surligne");
                          });
                       $("li").mouseout(function(){
                             $(this).removeClass("surligne");
                       });
                 });




antislashn.org                             JQuery                                         69 / 128
jQuery – gestion des CSS
      ●    hasClass : vérifie la présence d'une classe CSS
             –   renvoie true ou false
      ●    toggleClass : ajoute ou supprime une classe
             –   ajoute la classe si elle n'est pas présente
             –   supprime la classe si elle est présent
             –   si plusieurs classes sont spécifiées, elles sont séparées par
                 des virgules
                  ●   plusieurs signatures existent




antislashn.org                                 JQuery                     70 / 128
jQuery – gestion des CSS
●    Un grand nombre de méthodes permettent de
     retrouver (et changer) les positions et dimensions
     d'un élément
      ●    la signature sans paramètre retourne un nombre sous
           forme de String
      ●    la signature avec paramètre change la valeur
●    la méthode css() permet de retrouver la valeur
     d'un attribut de style en gardant l'indication d'unité
      ●    $(this).css('width')   pourrait renvoyer 100px
      ●    $(this).width()        pourrait renvoyer 100

antislashn.org                          JQuery              71 / 128
jQuery – gestion des CSS
●    La méthode css()
      ●    $(this).css('color')   permet de récupérer la valeur d'une
           propriété de style
      ●    permet de mettre à jour les styles au moyen d'un
           paramètre JSon $(this).css({color :'red', border:'solid       1px'})

             –   ou une seule propriété   $(this).css('color','blue') 

      ●    permet au aussi de mettre à jour les styles au moyen
           d'une fonction qui reçoit en paramètre l'indice de
           l'élément dans la collection et la valeur du style
             –   css(propertyName,function(index,value))



antislashn.org                             JQuery                         72 / 128
jQuery – gestion des CSS
●    Dimensionnement avec jQuery
      ●    height(), width() : hauteur et largeur
             –   interrogation ou mise à jour
             –   signature avec fonction de calcul recevant l'indice dans la
                 sélection et la valeur actuelle
      ●    innerHeight(), innerWidth() : dimension interne
             –   padding inclus et bordure exclue
      ●    outerHeight(), outerWidt() : dimension externe
             –   un booléen est passé à la méthode pour préciser s'il faut
                 inclure le margin ou non
                  ●   false (margin non inclus) par défaut


antislashn.org                                  JQuery                    73 / 128
jQuery – gestion des CSS
●    Positionnement avec jQuery
      ●    position() : retourne sous forme d'objet {top,left} la
           position par rapport à l'élément parent
      ●    offset() : retourne sous forme d'objet {top,left} la
           position relative au document
      ●    scrollTop(), scrollLeft() : modifie le décalage
           entre un bord du document et l'élément sélectionné




antislashn.org                     JQuery                     74 / 128
jQuery – les événements
●    Les gestionnaires d'événements de jQuery sont similaires
     aux événements DHTML
      ●    syntaxe simplifiée
             –   onclick devient click, onmouseover devient mouseover, ...
      ●    par les sélecteurs il est aisé de mettre le même gestionnaire
           d'événement sur tout un ensemble d'éléments
      ●    facilité de mettre en place du code non intrusif
             –   les différences entre navigateurs sont gommées
      ●    possibilité de passer des données aux événements
             –   format JSon



antislashn.org                             JQuery                     75 / 128
jQuery – les événements
●    Les événements possèdent deux signatures
      ●    eventName(handler(eventObject))
      ●    eventName([eventData],handler(eventObject))
             –   eventName : nom de l'événement
                  ●   click, submit, …
             –   handler : fonction qui sera invoquée lors du déclenchement
                 de l'événement
                  ●   doit renvoyer false pour arrêter la remontée de l'événement
             –   eventObject : objet de type jQuery.Event qui est
                 automatiquement passé au gestionnaire d'événement
      ●    eventData : données sous forme JSon qui peut être
           passé au gestionnaire d'événements
antislashn.org                                 JQuery                               76 / 128
jQuery – les événements
●    L'objet jQuery Event
      ●    normalise les différentes implémentation des objets
           événement des navigateurs
      ●    propriétés normalisée
             –   target, relatedTarget, pageX, pageY, wich, metaKey
      ●    d'autres propriétés sont copiées, qui peuvent être
           undefined selon l'événement
             –   altKey, bubbles, button, cancelable, charCode,
                 clientX, clientY, screenX, …
      ●    documentation :
           http://api.jquery.com/category/events/event-object/

antislashn.org                       JQuery                       77 / 128
jQuery – les événements
●    Événements du navigateur
      ●    error() : événement invoqué en cas d'erreur
           JavaScript
      ●    resize() : événement invoqué lors du
           redimensionnement de la fenêtre du navigateur
      ●    scroll() : événement invoqué lors de l'utilisation des
           barres de scolling




antislashn.org                    JQuery                    78 / 128
jQuery – les événements
●    Chargement du document
      ●    load() : invoqué lorsqu'un élément et ses fils ont été
           complètements chargés
             –   concerne les éléments associés à une URL : image, script,
                 frame, iframe, window
      ●    ready() : invoqué lorsque le DOM est construit
             –   incompatible avec <body onload="...">
             –   syntaxes équivalentes :
                  ●   $(document).ready(handler)
                  ●   $().ready(handler)
                  ●   $(handler)
      ●    unload() : invoqué lorsque l'utilisateur quitte la page
antislashn.org                             JQuery                      79 / 128
jQuery – les événements
●    Les événements du formulaire
      ●    blur() : invoqué lors de la perte de focus
      ●    change() : invoqué lors du changement d'un élément
           de formulaire
             –   changement entre la prise et perte de focus
      ●    focus() : invoqué lors de la prise de focus
      ●    select() : invoqué lors de la sélection d'un texte dans
           un <input type='text'> ou un <textarea>
      ●    submit() : invoqué lors de la soumission d'un
           formulaire

antislashn.org                           JQuery                80 / 128
jQuery – les événements
●    Les événements clavier
      ●    focusin() : invoqué si un élément ou un de ses fils
           gagne le focus
      ●    focusout() : invoqué si un élément ou un de ses fils
           pert le focus
      ●    keydown() : invoqué lors de l'appui d'une touche du
           clavier
      ●    keypressed() : invoqué lors de l'appui d'une touche
           du clavier, avec gestion de la répétition
      ●    keyup() : invoqué lors du relâchement d'une touche du
           clavier
antislashn.org                    JQuery                   81 / 128
jQuery – les événements
●    Les événements souris
      ●    clic de souris : click(), dblclick()
             –   ces deux événements ne doivent pas être utilisés ensemble
                 sur le même élément
      ●    mouvements de la souris : mousedown(), mouseup(),
           mousemove(), mouseover()
             –   certains événement IE sont émulés : mouseenter(),
                 mouseleave()
      ●    hover() permet de positionner un handler pour l'entrée
           et la sortie d'un élément
      ●    toggle() gère les cycles de sélection et dé-selection
           d'un élément par le clic souris
antislashn.org                          JQuery                        82 / 128
jQuery – les événements
●    bind() permet de lier un (ou plusieurs)
     événement, des données et un gestionnaire
     d'événement à une sélection d'élément
      ●    les éléments du DOM doivent exister lors de la liaison
             –   voir delegate(), ou live() pour attacher des pour des
                 éléments qui ne sont pas encore créer
             –   cf. on() depuis la version 1.7
●    d'autres méthodes jQuery existe pour lier des
     événements, ou supprimer des événements
      ●    faire attention aux versions de jQuery
      ●    http://api.jquery.com/category/events/event-handler-attachment/
             –
antislashn.org                           JQuery                              83 / 128
jQuery – les formulaires
●    jQuery n'ajoute rien de nouveau dans la gestion des
     formulaires
●    Un ensemble de sélecteurs de formulaire permet de
     sélectionner rapidement un ensemble d'éléments
     d'un formulaire
      ●    :input, :text, :password, :radio, ...
●    Filtres de sélection
      ●    :checked, :selected



antislashn.org                  JQuery             84 / 128
jQuery – les effets
 ●    jQuery offre la possibilité d'automatiser certains effets et
      animations
       ●    à utiliser à bon escient et avec modération
 ●    La plupart des fonctions sur les effets utilise des paramètres
      optionnels
       ●    speed: 'slow', 'normal' ou 'fast' – ou un nombre en millisecondes
       ●    easing : effet prédéfini personnalisé par plugin
       ●    function : une fonction callback qui sera invoquée à la fin de
            l'effet
 ●    L'ensemble des effets peut être désactivé par l'instruction
      jQuery.fx.off = true

antislashn.org                          JQuery                         85 / 128
jQuery – les effets
●    Effets de base
      ●    hide() : cache la sélection
      ●    show() : affiche la sélection
●    Glissements
      ●    slideDown() : fait apparaître, par glissement vers le
           bas, un élément
      ●    slideUp() : fait disparaître, par glissement vers le
           haut, un élément



antislashn.org                     JQuery                     86 / 128
jQuery – les effets
●    Effets de fondu
      ●    fadeIn() : fait apparaître un élément avec effet de
           fondu
      ●    fadeOut() : fait disparaitre un élément avec effet de
           fondu
      ●    fadeTo() : modifie l'opacité de l'élément sélectionné
●    Différer un effet
      ●    la méthode delay() permet de différer un effet
                 $("div.effet").slideUp(300).delay(2000).fadeIn(600);




antislashn.org                           JQuery                         87 / 128
jQuery – les effets
●    Passer d'un effet à l'autre
      ●    toggle() : bascule un élément d'invisible à visible, et
           inversement
      ●    toggle(function1,fucntion2) : bascule d'une
           fonction à l'autre à chaque clic sur l'élément
      ●    slideToggle() : bascule de slideUp vers
           slideDown et inversement
      ●    fadeToggle() : bascule de visible à invisible par effet
           de fondu, et inversement



antislashn.org                     JQuery                     88 / 128
jQuery – les effets
●    animate() permet de créer une animation
      ●    un paramètre obligatoire sous forme d'objet JSon fournit
           les styles à animer
      ●    en plus des paramètres optionnels de vitesse, easing et
           fonction callback

      animate({fontSize:"24px", left:300, width: "200px", opacity: 0.5},1000 )




antislashn.org                         JQuery                           89 / 128
jQuery – parcourir le DOM
●    Le parcours du DOM est conforme à ce qui est
     habituellement utilisée avec l'API DOM 3
      ●    traversée en Java, JavaScript ou XPath
●    On retrouve donc l'ensemble des fonctionnalités
     usuelles
      ●    retrouver les enfants, parents, …
      ●    mais avec un vocabulaire qui n'est pas le même que
           l'API du W3C




antislashn.org                     JQuery                  90 / 128
jQuery – parcourir le DOM
●    L'ensemble des méthodes jQuery de parcours du
     DOM renvoie un objet jQuery, ce qui permet de
     chaîner les appels
●    La documentation complète est accessible sur le
     lien : http://api.jquery.com/category/traversing/tree-traversal/
●    Les pages suivantes résument les méthodes de
     parcours du DOM




antislashn.org                     JQuery                         91 / 128
jQuery – parcourir le DOM
●    children() : renvoie une collection d'éléments
     enfants immédiats de chaque élément sélectionné
●    parent() : renvoie le parent immédiat de chaque
     élément sélectionné
●    parents() : renvoie une collection d'éléments
     ancêtres de chaque élément sélectionné
●    parentUntil() : renvoie une collection
     d'éléments ancêtres de chaque élément
     sélectionné, jusqu'à un élément (ou sélecteur)
     passé à la fonction
 ●
antislashn.org              JQuery                    92 / 128
jQuery – parcourir le DOM
●    siblings() : renvoie les frères de chaque
     élément de la sélection
●    prev() : renvoie le frère immédiatement précédent
     de chaque élément de la sélection
●    prevAll() : renvoie les frères précédents de
     chaque élément de la sélection
●    prevUntil() : renvoie les frères précédents de
     chaque élément de la sélection, jusqu'à un élément
     désigné par le sélecteur

antislashn.org             JQuery                   93 / 128
jQuery – parcourir le DOM
●    next() : renvoie le frère immédiatement suivant de
     chaque élément de la sélection
●    nextAll() : renvoie les frères suivants de chaque
     élément de la sélection
●    nextUntil() : renvoie les frères suivants de
     chaque élément de la sélection, jusqu'à un élément
     désigné par le sélecteur




antislashn.org             JQuery                 94 / 128
jQuery – parcourir le DOM
●    content() : renvoie tous les nœuds enfants de
     chaque élément de la sélection
●    closest(selecteur) : renvoie le parent le plus
     proche de chaque élément sélectionné répondant
     au sélecteur
●    find(selecteur) : renvoie les descendants de
     chaque élément sélectionné répondant au sélecteur
●    find(param) : ajoute les éléments fournis en
     agruments (élément, sélecteur ou HTML)

antislashn.org             JQuery                   95 / 128
jQuery – manipuler le DOM
●    Nous avons déjà vu les méthodes text() et html()
●    Les pages suivantes présente les méthodes de
     manipulation du DOM, sans les détailler
      ●    comme habituellement sous jQuery, la plupart des
           méthodes prennent en paramètre un contenu ou une
           fonction renvoyant un contenu
      ●    cf. http://api.jquery.com/category/manipulation/




antislashn.org                     JQuery                     96 / 128
jQuery – manipuler le DOM
●    text() et html() : modification du contenu
●    append() : ajout à l'intérieur de l'élément sélectionné, en
     mode ajout
●    after() : ajout après l'élément sélectionné
●    before() : ajout avant l'élément sélectionné
●    wrap() : ajout autour de l'élément sélectionné
●    wrapAll() : ajout autour tous les éléments de la sélection
●    wrapInner() : ajout autour des enfants de l'élément
     sélectionné
●    unwrap() : annule l'action de wrap()
antislashn.org                  JQuery                     97 / 128
jQuery – manipuler le DOM
●    replaceWith() : remplace l'élément sélectionné par le
     contenu spécifié
●    remove() : supprime du DOM tous les éléments
     répondant aux critères de sélection
●    detach() : comme remove(), mais en conservant les
     données associées
●    clone() : copie les éléments




antislashn.org                JQuery                   98 / 128
jQuery – filtres sur le DOM
●    filter(expression) : réduit l'ensemble des éléments
     sélectionnés à ceux qui passe le filtre
●    eq(index) : réduit l'ensemble des éléments sélectionnés à celui
     correspond à la position
●    slice(debut[,fin]) : réduit l'ensemble des éléments
     sélectionnés à ceux qui sont entre deux positions
●    is(expression) : indique si la sélection répond à un critère,
     renvoie true ou false
●    first() et last() : réduit l'ensemble des éléments sélectionnés
     au premier ou dernier item
●    has(selecteur) : réduit l'ensemble des éléments sélectionnés à
     ceux qui ont un descendant correspondant au sélecteur

antislashn.org                     JQuery                        99 / 128
jQuery – les caractères spéciaux
●    jQuery utilise un certain nombre de caractères
     comme éléments de syntaxe
●    Si ces caractères sont utilisés dans des
     expressions littérales, il faut les échapper avec
     deux caractères backslash - 
●    Liste des caractères spéciaux
      ●    # ; & , . + * ~ ' : ! ^ $ [ ] ( ) = > | /




antislashn.org                            JQuery       100 / 128
jQuery - AJAX
●    jQuery facilite l'écriture du code AJAX
●    AJAX nécessite aussi de la programmation côté serveur
      ●    ce qui signifie :
             –   un langage : PHP, ASP, .NET, Java, …
             –   un serveur : Apache, IIS, Tomcat, Jboss, …
             –   une base de données : MySql, Oracle, SQLServer, Derby, …
●    La programmation côté serveur n'est pas abordée ici
●    Il est intéressant, si ce n'est essentiel, de mettre en place
     des outils de suivi des requêtes AJAX dans le navigateur



antislashn.org                            JQuery                        101 / 128
jQuery - AJAX
●    load(url [,datas] [,function])
      ●    charge une ressource dans la sélection
             –   url : url de la ressource
             –   datas : pairs clé/valeur envoyées au serveur
                  ●   si aucune données la méthode GET est utilisée
             –   function : fonction à exécuter en cas de réussite de la
                 requête
      ●retourne un objet jQuery
●    loadIfModified(url [,datas] [,function])
      ●    ne charge la ressource que si celle si est modifiée
      ●    même fonctionnement que load()
antislashn.org                                JQuery                  102 / 128
jQuery - AJAX
●    Exemple de code load()
      ●    onglet Network de Chrome
                                   jQuery 04 – Ajax/load.html
     $(document).ready(function(){
            $("#conteneur").load("test.html");
     })

                                                         ressource à charger


                             <div id='conteneur></div>




antislashn.org                         JQuery                                  103 / 128
jQuery - AJAX
●    $.get(url [,datas] [,function] [,type])
      ●    effectue une requête AJAX avec une méthode HTTP
           GET
             –   url : ressource à charger
             –   datas : paires clé/valeur envoyées au serveur
             –   function : fonction à exécuter en cas de réussite de la
                 requête
             –   type : type de la réponse fournie à la fonction callback
                  ●   String pouvant être : xml, html, script, json, jsonp, text
      ●    renvoie un objet XMLHttpRequest



antislashn.org                                    JQuery                           104 / 128
jQuery - AJAX
●    $.post(url [,datas] [,function] [,type])
      ●    effectue une requête AJAX avec une méthode HTTP
           POST
             –   url : ressource à charger
             –   datas : paires clé/valeur envoyées au serveur
             –   function : fonction à exécuter en cas de réussite de la
                 requête
             –   type : type de la réponse fournie à la fonction callback
                  ●   String pouvant être : xml, html, script, json, jsonp, text
      ●    renvoie un objet XMLHttpRequest



antislashn.org                                    JQuery                           105 / 128
jQuery - AJAX
●    $.getSrcipt(url[,function])
      ●    charge une script via la méthode HTTP GET et l'exécute
             –   url : script à charger
             –   function : fonction à exécuter en cas de réussite de la
                 requête
      ●    renvoie un objet XMLHttpRequest

                     $(document).ready(function(){
                            $.getScript("hello.js");
                     });




antislashn.org                             JQuery                     106 / 128
jQuery - AJAX
●    Les méthodes précédentes sont des raccourcis de
     l'utilisation de la méthode $.ajax()
●    La méthode ajax() permet de maîtriser
     complètement le fonctionnement de l'objet
     XMLHttpRequest
●    Les paramètres de la fonction sont fournis sous la
     forme d'un objet JSon
●    cf. http://api.jquery.com/jQuery.ajax/



antislashn.org                JQuery               107 / 128
jQuery - AJAX
●    La méthode ajax() permet de s'adapter à tous les
     cas de figure
      ●    authentification, cross domaine, ajout dans le header de
           la requête, …
      ●    bien étudier la documentation
                 $(document).ready(function(){
                     $.ajax({
                         url: 'teste.html',
                         success: function(data){
                             $('#conteneur').html(data);
                         },
                         error: function(xhr,status,error){
                             console.log(status);
                             console.log(error);
                         },
                     });
                 });


antislashn.org                                  JQuery        108 / 128
jQuery - AJAX
●    Événements associés à la requête AJAX
      ●    ajaxSend(function) : assigne une fonction callback qui sera
           exécutée avant l'envoi de la requête
      ●    ajaxStart(function) : assigne une fonction callback qui sera
           exécutée lors du début de la requête
      ●    ajaxStop(function) : assigne une fonction callback qui sera
           exécutée à la fin de toutes les requêtes
      ●    ajaxSuccess(function) : assigne une fonction callback qui
           sera exécutée en cas de succès de la requête
      ●    ajaxComplete(function) : assigne une fonction callback qui
           sera exécutée à la fin complète de la requête
      ●    ajaxError(function) : assigne une fonction callback qui sera
           exécutée en cas de d'erreur sur la requête
antislashn.org                      JQuery                      109 / 128
jQuery - AJAX
●    Fonctions utilitaires (helpers)
      ●    serialize() : encode un formulaire en String pouvant
           être soumis au serveur
      ●    serializeArray() : encode un formulaire en un
           tableau JSon de clé/valeurs




antislashn.org                   JQuery                  110 / 128
jQuery – construction d'une popup
●    Pour illustrer la prise en main de jQuery, nous
     allons créer une popup d'identification
      ●    deux champs de saisie : user et password
●    Pour valider la saisie un script vallidation.js vérifie si
     le champ est remplit ou non
      ●    ce script créé un événement personnalisé qui sera
           appelé ensuite sur des événement du DOM




antislashn.org                    JQuery                   111 / 128
jQuery – construction d'une popup
●    script de validation
      ●    le fichier validation.js doit être ajouter avant le script AuthPopup.js
    $(":text,:password").live('validation',function(){
       var val = $.trim($(this).val());
       var errorMessage=[];
       if($(this).hasClass('required') && val=="")
          errorMessage.push("Champ obligatoire");

          var isOk = errorMessage.length==0;
          var msg;
          if(!isOk)
             msg = "<div class='error'>"+errorMessage.join('<br/>')+"</div>";
          if($(this).next().is("div.error"))
             $(this).next().remove();

       $(this).after(msg);
       $(this).data("isValid",isOk);
    });

antislashn.org                              JQuery                              112 / 128
jQuery – construction d'une popup
●    Création d'un objet JavaScript AuthPopup qui
     permettra
      ●    de créer le code HTML
      ●    d'ajouter des événements
             –   pour la validation du formulaire
      ●    d'afficher le formulaire
      ●    d'envoyer les informations au serveur
      ●    de cacher le formulaire




antislashn.org                            JQuery    113 / 128
jQuery – construction d'une popup
●    Structure de base JavaScript
                 var AuthPopup = {
                       create: function(){},

                      addEvents: function(){},

                      show: function(){},

                      sendToServer: function(){},

                      hide: function(){}
                 };




antislashn.org                         JQuery       114 / 128
jQuery – construction d'une popup
●    La mise en place du HTML est confiée à la fonction create()
      create: function(){
             var html=[];
             var i=0;
             html[i++] = "<div id='authPopup'>";
             html[i++] = "<form>";
             html[i++] = "<div id='header'>Identifiez-vous<div    id='cmdCancel'>x</div></div>";
             html[i++] = "<div id='body'>";
             html[i++] = "<div><label for='user'>User </label>";
             html[i++] = "<input type='text' id='user' class='required'/></div>";
             html[i++] = "<div><label for='pswd'>Password </label>";
             html[i++] = "<input type='password' id='pswd' class='required'/></div>";
             html[i++] = "<div><input type='submit' id='cmdSend' value='OK'/></div>"
             html[i++] = "</form>";
             html[i++] = "</div>";

                 $('body').append(html.join(""));
                 $('body').append("<div id='overlay'></div>");
      },




antislashn.org                                      JQuery                                115 / 128
jQuery – construction d'une popup
●    L'affichage de la popup est confiée à la méthode
     show()
show: function(){
   if($("#authPopup").size() == 0){
      this.create();
      this.addEvents();
   }

     var top = $(window).scrollTop()+($(window).height() - $('#authPopup').height())/2;
     var left = $(window).scrollLeft()+($(window).height() - $('#authPopup').height())/2;

     $("#authPopup")
        .css('top',Math.max(0,top))
        .css('left',Math.max(0,left))
        .slideDown('slow')
     .find(':text,textarea').first().focus();

     $("#overlay").fadeIn();
},



antislashn.org                             JQuery                               116 / 128
jQuery – construction d'une popup
●    La fermeture de la popup est gérée par la méthode
     hide()

                 hide: function(){
                     $("#authPopup").slideUp('slow',function(){
                         $("#overlay").fadeOut();
                     });
                 }




antislashn.org                         JQuery                     117 / 128
jQuery – construction d'une popup
●   Les événements sont ajoutés par la méthode
    addEvents()
      ●   la méthode de validation est liée à l'événement du DOM
          par la méthode trigger()
      ●   la croix doit fermer la popup
            –    le proxy est utilisé pour garder de la popup lors de l'appel de
                 hide()
      ●   l'appui sur la touche OK doit soumettre le formulaire




antislashn.org                             JQuery                          118 / 128
jQuery – construction d'une popup
●    Code de la fonction addEvents()
      addEvents: function(){
          $(":text, :password").live("blur",function(){
              $(this).trigger("validation");
          });
          $("#cmdCancel").click($.proxy(this.hide,AuthPopup));
          $("#authPopup").children("form").submit(
              {"popup":this},
              function(event){
                  if($('#user').val()=="" || $('#pswd').val()==""){
                      alert("Formulaire incomplet");
                  }
                  else{
                      event.data.popup.sendToServer();
                               event.data.popup.hide();
                  }
                  return false;
          });
      },



antislashn.org                             JQuery                     119 / 128
jQuery – construction d'une popup
●    Code de la méthode addEvents()
      ●    Enregistrement de l'événement click
             –   une première approche aurait pu donner ceci :
                 $("#cmdCancel").click(this.hide);
                  ●


                  ●   mais dans le contexte de l'appel de l'événement this est le bouton
                      submit !!!
             –   jQuery fournit $.proxy() qui permet de définir le contexte
                 d'exécution d'une fonction
                  $("#cmdCancel").click($.proxy(this.hide,AuthPopup));
                   ●


                  ●   lors de l'appel de $.proxy() this fait référence à AuthPopup
                       –   le 2nd paramètre est le contexte dans lequel doit être appelée la
                           méthode, AuthPopup qui est l'objet aurait pu être remplacé par
                           this


antislashn.org                                   JQuery                                120 / 128
jQuery – construction d'une popup
●    Code de la méthode addEvents()
      ●    soumission du formulaire (extraits de code)
    $("#authPopup").children("form").submit({"popup":this},function(event)...
         –
             –   un objet est passé à submit(), cet objet référencie dans la
                 propriété popup l'objet AuthPopup
             –   cet objet est lié à l'objet event qui sera passé à la fonction
                 callback
             –   il devient alors d'appeler les méthode de l'objet AuthPopup
                 avec le bon contexte
                      event.data.popup.sendToServer();
                      event.data.popup.hide();
      ●    la méthode addEvent() retourne false pour stopper
           la soumission
antislashn.org                             JQuery                         121 / 128
jQuery – construction d'une popup
●    L'envoi des données au serveur est confiée à la
     méthode sendToServer()
                 sendToServer: function(){
                     $.ajax({
                         'url':'authentification',
                         'type':'POST',
                         'context':this,
                         'data':{
                             'user':$("#user").val(),
                             'pswd':$("#pswd").val()
                             },
                         'success':function(){
                             console.log("envoi réussi");
                             }

                      });
                 },

antislashn.org                               JQuery         122 / 128
jQuery – construction d'une popup
●    Pour l'instant aucune feuille de style n'a été définie
      ●    Notre popup ressemble à cela



      ●    la feuille de style AuthPopup.js permet d'obtenir




antislashn.org                     JQuery                      123 / 128
jQuery – les plugins
●    jQuery peut être étendu à l'aide de plugin
      ●    le développement des plugins n'entre pas dans cette
           présentation
      ●    largement documenté sur le web
●    jQuery possède une large gamme de plugins
●    Tous les plugins se basent sur jQuery, il faut donc
     inclure la bibliothèque jQuery, et les bibliothèques
     des plugins
●    Deux plugins sont maintenus par le projet jQuery
      ●    jQuery UI et jQuery mobile
antislashn.org                    JQuery                   124 / 128
UI
●    Permet d'ajouter au projet des effets visuels, des
     widgets
      ●    onglets, calendriers, boites de dialogue, barre de
           progression, …
●    Le téléchargement des bibliothèques peut être
     personnalisé
      ●    cf. http://jqueryui.com/download
             –   les composants peuvent êtes ajoutés un par un




antislashn.org                          JQuery                   125 / 128
UI
●    Les widgets sont contrôlés par :
      ●    le fichier JavaScript
      ●    le fichier des CSS
      ●    un répertoire des images
●    Il faut donc ajouter à la page
      ●    adapter les chemins et noms de fichier si nécessaire
  <link type="text/css" href="css/smoothness/jquery-ui-1.8.18.custom.css"
  rel="Stylesheet" />
  <script type="text/javascript" src="js/jquery.js"></script>
  <script type="text/javascript" src="js/jquery-ui.js"></script>




antislashn.org                           JQuery                             126 / 128
Bibliographie
●    AJAX – Le guide complet
      ●    auteurs : Bruno CATTEAU et Nicolas FAUGOUT
      ●    éditeur : Micro Application
●    JQuery – Découverte du framework JavaScript
      ●    auteur : Luc VAN LANCKER
      ●    éditeur : ENI éditions
●    JQuery – Le guide complet
      ●    auteurs : Guillaume ALLAIN et Timothy STUBBS
      ●    éditeur : Micro Application

antislashn.org                      JQuery                127 / 128
Ressources web
●    Sites officiels
      ●    http://jquery.com/
      ●    http://www.json.org/
      ●    http://www.w3.org/
      ●    http://www.w3schools.com/
●    Blogs
      ●    http://www.codylindley.com/jqueryselectors/
      ●    www.mathieurobin.com/category/devweb/javascript/jquery/



antislashn.org                     JQuery                    128 / 128

jQuery

  • 1.
    JQuery v 1.2
  • 2.
    Votre formateur var formateur = { prenom : "Franck", nom : "SIMON", formation : "ingénieur", competences : ["Java","Java EE","C - C++", "web", "Javascript","PHP","MySql","etc."], emploi : "consultant independant", email : "franck.simon@antislashn.org", web : "www.franck-simon.com" }; http://www.linkedin.com/pub/franck-simon/49/584/b73 http://www.viadeo.com/fr/profile/franck.simon16 https://plus.google.com/u/0/103522587535315941799/posts @antislashn antislashn.org JQuery 2 / 128
  • 3.
    jQuery ● Objectifs de la formation ● revoir les principes du Web 2.0 – JSON, Ajax ● savoir utiliser les outils de debug des navigateurs ● revoir les principes d'utilisation de JavaScript en programmation objet ● revoir les principes de chargement du DOM ● savoir utiliser jQuery antislashn.org JQuery 3 / 128
  • 4.
    Web 2.0 ● Évolution conceptuelle du Web ● expression inventée par Dal Dougherty, et reprise par Tim O'Reilly – terme largement accepté maintenant ● ensemble de techniques, fonctionnalités ● objectifs – utilisation plus naturelle du Web – meilleurs expérience utilisateur ● fluidité de la navigation, attente minime, ... – web social antislashn.org JQuery 4 / 128
  • 5.
    Web 2.0 ● Application Web "traditionnelle" URL : 1ére requête génération envoi page complète page affichage page requête + données génération envoi page complète page affichage page requête + données génération affichage envoi page complète page page antislashn.org JQuery 5 / 128
  • 6.
    Web 2.0 ● Application Web 2,0 URL : 1ére requête génération envoi page complète page affichage page requête + données génération envoi données données injection données requête + données génération injection envoi donnée données données antislashn.org JQuery 6 / 128
  • 7.
    Web 2.0 ● Le Web 2.0 est donc un mode de développement des sites web ● une page est envoyée à la première connexion – avec fichiers CSS et JavaScript ● chaque action de l'utilisateur sur la page provoque des demande de au serveur – le serveur ne renvoie que des données ● pas de page complète à envoyer ● nécessite une fonctionnalité spécifique qui permet au navigateur de faire ds requêtes au serveur via JavaScript – l'objet XMLHttpRequest antislashn.org JQuery 7 / 128
  • 8.
    Deboguer JavaScript ● Tous les navigateurs actuels fournissent nativement ou par plugin des outils de debug ● suivi des requêtes, avec temps de réponse ● console de log JavaScript – avec ● affichage du DOM, des CSS, etc. ● Ces outils ne sont pas activés par défaut ● il faut d'abord charger l'éventuel plugin ● puis activer l'outil de debug antislashn.org JQuery 8 / 128
  • 9.
    Deboguer JavaScript ● Deboguer avec IE ● IE est livré avec des outils de debug ● activation par le menu Outils de développement – touche F12 antislashn.org JQuery 9 / 128
  • 10.
    Deboguer JavaScript ● Console IE antislashn.org JQuery 10 / 128
  • 11.
    Deboguer JavaScript ● Deboguer avec Firefox ● ajouter le plugin Firebug – menu Modules complémentaires antislashn.org JQuery 11 / 128
  • 12.
    Deboguer JavaScript ● Deboguer avec Firefox ● installer FireBug ● puis dans le menu Développement Web, activer les outils antislashn.org JQuery 12 / 128
  • 13.
    Deboguer JavaScript ● Console de FireBug ● bien noter qu'il existe la console par défaut et la console de FireBug antislashn.org JQuery 13 / 128
  • 14.
    Deboguer JavaScript ● Deboguer avec Google Chrome ● ajouter via Chrome Web Store le plugin FireBug Lite ● activer le mode développeur dans le extensions – menu Outils … Options antislashn.org JQuery 14 / 128
  • 15.
    Deboguer JavaScript ● Deboguer avec Google Chrome ● activer le mode développeur – menu Outils … Outils de développement antislashn.org JQuery 15 / 128
  • 16.
    Deboguer JavaScript ● Console de Google Chrome antislashn.org JQuery 16 / 128
  • 17.
    Deboguer JavaScript ● Si la console est supportée par le navigateur ● vous pouvez utiliser l'objet console console.log("Hello"); console.error("ERREUR"); ● si la console n'existe pas, vous pouvez l'émuler par un affichage dans des balises div sur votre page if(!console) { console = {}; console.log = function(message){ document.getElementById("__console_log__").innerHtml += message; } console.error = function(message){ document.getElementById("__console_error__").innerHtml += message; } } antislashn.org JQuery 17 / 128
  • 18.
    JSon ● JSon : JavaScript Object Notation ● format d'échange humainement compréhensible ● RFC 4627 ● souvent utilisé pour la sérialisation et la transmission d'objets ● la fonction eval() de JavaScript permet ensuite d'évaluer la chaîne de caractères JSon json_1.html var r = eval("2+2"); console.log(r); var json = '{civilite:"M",...,adresse:{rue:"Rue de Bruxelles",...}}'; var obj = eval("("+json+")"); console.log(obj.adresse.ville); antislashn.org JQuery 18 / 128
  • 19.
    JSon ● Syntaxe de base ● cf le site de référence http://www.json.org/ antislashn.org JQuery 19 / 128
  • 20.
    POO et JavaScript ● JavaScript offre un support limité des concepts objets ● la classe en tant que telle n'existe pas – le mot clé class est réservé mais n'est pas utilisé ● la programmation est orienté prototype – le prototype est un objet permettant la création d'autres objets par clonage ● la POO en JavaScript se base sur les mécanismes de – prototype – function – concept de closure (fermeture) antislashn.org JQuery 20 / 128
  • 21.
    POO et JavaScript ● Tout est objet en JavaScript ● sauf null et undefined ● JavaScript utilise deux types d'objets ● les objets natifs (Native Object) ● les objets du conteneur d'exécution (Host Object) ● Les objets natifs utilisent des collections dynamiques de propriétés ● contient un référence vers un autre objet, null ou undefined ● la fonction delete permet de supprimer un propriété antislashn.org JQuery 21 / 128
  • 22.
    POO et JavaScript ● Création d'une classe ● les classe sont définie via des fonctions function foo(){ var message = "Hello"; this.getMessage = function(){ return message;} alert(message); } ● le mot clé new permet de créer une instance var f = new foo(); alert(f.getMessage()); antislashn.org JQuery 22 / 128
  • 23.
    POO et JavaScript ● Dans l'exemple de la page précédente ● foo est une fonction, foo peut-être vu comme une classe ● l'instanciation par new va : – exécuter la fonction – créer un espace de stockage pour les variables locales stockées dans la fonction ● la variable message est "privée" à la classe ● la méthode getMessage est ajoutée à l'instance – this référencie l'objet lui-même ● alert() est exécuté antislashn.org JQuery 23 / 128
  • 24.
    POO est JavaScript ● Contexte d'exécution des fonctions ● le mot-clé this dans un contexte non objet fait référence à window – si la fonction foo est exécutée en tant que fonction, getMessage est ajouté à window ● this fait référence à window foo(); alert(window.getMessage()); – si une instance de foo est créée, this fait référence à l'objet créé ● getMessage devient une méthode de foo var f = new foo(); alert(f.getMessage()); antislashn.org JQuery 24 / 128
  • 25.
    POO et JavaScript ● Le type natif Object est une collection de propriétés ● Les propriétés sont crées dynamiquement lors de l'assignation d'une valeur ● la propriété est mise à jour si elle existe var o = new Object(); o.couleur = "vert"; console.log(o.couleur); console.log(o['couleur']); antislashn.org JQuery 25 / 128
  • 26.
    POO et JavaScript ● Par défaut Object ne possède que la propriété prototype ● prototype est de type Object ● une fonction est aussi de type Object ● La programmation par prototype ne fait pas la distinction entre une propriété de type donnée ou code ● la structure de l'objet peut changer dynamiquement antislashn.org JQuery 26 / 128
  • 27.
    POO et JavaScript ● Évaluation d'une propriété par l'interpréteur : ● l'interpréteur vérifie si la propriété existe au sein de l'objet ● si la propriété n'existe pas l'interpréteur la recherche auprès du prototype – le prototype étant un objet il possède lui-même un prototype – l'interpréteur interroge la chaîne des prototypes jusqu'à ce qu'il trouve la propriété ou que le chaînage des prototypes soit fini antislashn.org JQuery 27 / 128
  • 28.
    POO et JavaScript prototype.html function Toto(val){ this.valeur = val; } function Titi(message){ this.message = message; } Titi.prototype = new Toto(15); var o = new Titi("Hello"); console.log(o.valeur); console.log(o.message); antislashn.org JQuery 28 / 128
  • 29.
    POO et JavaScript ● Il est courant d'utiliser un objet littéral pour créer un espace de nommage ● évite les collisions de nommage ● n'est pas une spécification ● n'est pas un package namespace.html var antislashn = {}; antislashn.Personne = function(n){ var nom = n; this.getNom = function(){return nom}; } var p1 = new antislashn.Personne("Titi"); var p2 = new antislashn.Personne("Toto"); console.log(p1.getNom()); console.log(p2.getNom()); antislashn.org JQuery 29 / 128
  • 30.
    POO et JavaScript ● Une closure (fermeture) est formée par le retour d'un objet de type function ● cet objet ayant été créé dans le contexte d'exécution lors de l'appel de la fonction externe – on peut donc le voir comme une fonction interne à une fonction function foo(nb){ function add(val){ return nb+val; } return add; } var f = foo(10); console.log(f(5)); antislashn.org JQuery 30 / 128
  • 31.
    DOM ● Document Object Model ● représentation objet sous forme d'arbre ● Recommandation du W3C ● décrit une interface (API) indépendante de tout langage permettant de parcourir et mettre à jour la structure du document ● DOM navigateur ● historiquement permet de manipuler les éléments "importants" d'une page HTML – formulaires, images, etc – mais pas les div, h, ... antislashn.org JQuery 31 / 128
  • 32.
    DOM ● Le DOM de niveau 2 permet de parcourir tout les éléments du document HTML ● entre autre par getElementById sur l'objet document ● l'objet document possède aussi – createElement, createTextNode, createAttribute, … ● méthodes pour manipuler un nœud – appendChild, insertBefore, replaceChild, cloneNode, … ● méthodes pour naviguer dans le DOM – parentNode, childNodes, firstChild, lastChild, ... antislashn.org JQuery 32 / 128
  • 33.
    DOM ● Attention au différences entre navigateurs ● certains navigateurs ajoutent des nœuds de type texte ● Un nœud est de type Element, et possède les propriétés – nodeType : type de nœud (entier) – nodeName : nom du nœud – nodeValue : valeur du nœud (ou null) – attributes : tableau des attributs (ou null) ● JQuery facilitera le recherche dans le DOM antislashn.org JQuery 33 / 128
  • 34.
    Gestion des événements ● Un événement est un changement d'état de l'environnement qui peut-être intercepté par JavaScript ● clic sur un élément, clavier, souris, survol, … ● Un objet Event est créé par le navigateur ● objet global sous IE, ou passé à la fonction de gestion de l'événement dans les autres navigateur ● les propriétés de l'objet Event décrivent l'événement – source, cible, etc, antislashn.org JQuery 34 / 128
  • 35.
    Gestion des événements ● Principales propriétés de l'objet Event ● target : cible de l'événement – srcElement sous IE ● type : type d'événement – focus, load, click, … ● stopPropagation : stoppe la remontée de l'événement – cancelBubble sous IE ● preventDefault : annule les actions implicites sur les événements – submit par exemple ● currentTarget : nœud sur lequel se trouve l'événement lors de sa capture antislashn.org JQuery 35 / 128
  • 36.
    Gestion des événements ● La gestion des événements est différente selon les navigateurs ● Un bonne pratique est de mettre la gestion des événements hors du code HTML ● ne pas employer l'attribut onClick par exemple ● le code est alors très différents entre IE et Mozilla ● JQuery permet de standardiser le code de gestion des événements antislashn.org JQuery 36 / 128
  • 37.
    XMLHttpRequest ● Permet d'envoyer une requête HTTP vers le serveur et d'en contrôler la réception ● la récupération d'une instance de XHR diffère selon les navigateurs – avec IE 6 et moins : var xhr = new ActiveXObject("Microsoft.XMLHTTP"); – avec IE 7 + et les autres navigateurs var xhr = new XMLHttpRequest(); ● l'utilisation de l'objet est ensuite homogène antislashn.org JQuery 37 / 128
  • 38.
    XMLHttpRequest ● Les étapes d'utilisation de XHR ● récupérer une instance de XMLHttpRequest ● brancher une fonction de surveillance de la réponse sur l'événement onreadystatechange ● ouvrir la connexion vers la ressource – méthode open(...) ● envoyer la requête – méthode send(...) ● surveiller l'état de la réponse dans la fonction callback ● traiter la réponse lorsque celle-ci est valide – propriété responseText ou responseXML antislashn.org JQuery 38 / 128
  • 39.
    XMLHttpRequest ● Exemple de code (extrait) Complétion/index.jsp function recupererXMLHttpRequest() { Fonction retournant un objet if (window.XMLHttpRequest) { XHR, ou null s'il n'existe pas return new XMLHttpRequest(); } else if (window.ActiveXObject) { return new ActiveXObject("Microsoft.XMLHTTP"); } return null; } variable définie pour la page, contenant une instance XHR function executeRequete(url,fonction) { if (xhr) { fonction callback xhr.onreadystatechange = fonction; xhr.open("GET", url, true); xhr.send(null); } ouverture de la ressource en mode asynchrone } antislashn.org JQuery 39 / 128
  • 40.
    XMLHttpRequest ● Exemple de code (extrait) ● fonction callback Complétion/index,jsp function majListeVille() vaut 4 { var rep = ""; on vérifie la validité de la if (xhr.readyState==READY_STATE_COMPLETE réponse && xhr.status == 200){ réponse du serveur rep = xhr.responseText; document.getElementById('liste_villes').innerHTML = "<select onclick='majChamps(this)'>"+rep+"</select>"; } } antislashn.org JQuery 40 / 128
  • 41.
    CSS – modèleen boite ● Chaque élément HTML est représenté par une boite ● les valeurs de hauteur (height) et largeur (width) sont celles du contenu (content) antislashn.org JQuery 41 / 128
  • 42.
    jQuery – introduction ● JQuery est un framework open source ● écrit en JavaScript ● utilisé côté client ● Développé à l'origine par John RESIG ● première version en 2006 ● Projet soutenu par une communauté nombreuse ● Utilisé par de nombreux grands groupes ● IBM, Google, antislashn.org JQuery 42 / 128
  • 43.
    jQuery - introduction ● jQuery est un ensemble de fonctionnalités JavaScript permettant de manipuler le DOM d'une page HTML ● site de référence : jquery.com ● la bibliothèque est disponible sous la forme d'un simple fichier .js – compressé ou non – peut aussi être remplacée par un lien vers Google <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"> </script> antislashn.org JQuery 43 / 128
  • 44.
    jQuery - introduction ● Principales fonctionnalités ● parcours et modification du DOM ● gestion des événements ● effets et animations ● manipulation de CSS ● usage facilité d'AJAX ● ajout de fonctionnalités par plugins ● divers utilitaires antislashn.org JQuery 44 / 128
  • 45.
    jQuery - introduction ● La documentation jQuery est très explicite, avec de nombreux exemples ● http://jquery.com/ ● quelques exemples de base sont disponibles à l'adresse http://docs.jquery.com/Tutorials:Live_Examples_of_jQuery antislashn.org JQuery 45 / 128
  • 46.
    jQuery – thebig picture antislashn.org JQuery 46 / 128
  • 47.
    jQuery - bases ● jQuery repose sur une seule fonction ● jQuery() ou plus simplement $() – admet des paramètres qui peuvent être ● une fonction qui sera exécutée lorsque le DOM sera chargé ● une chaîne de caractères appelée "query" qui permettra de sélectionner des nœuds du DOM – retourne un résultat : objet jQuery ● ce qui permet de chaîner les appels de méthode ● Un query peut correspondre à ● un sélecteur CSS ● un sélecteur XPath ● un sélecteur jQuery antislashn.org JQuery 47 / 128
  • 48.
    jQuery - bases ● Classiquement les développement JavaScript font appels à window.onload = function(){...} ; ● l'événement sera déclenché lorsque toute la page aura été chargée – html, images, css, … ● L'utilisation de jQuery permet de lancer la fonction dès que le DOM est prêt $(document).ready(function(){ console.log("boujour document"); }); antislashn.org JQuery 48 / 128
  • 49.
    jQuery – lesbases ● Le sélecteur $(this) correspond à l'objet en cours de manipulation ● Un grand nombre de méthodes de jQuery accepte une fonction comme paramètre ● souvent ces fonctions reçoivent des paramètres positionnés par jQuery – comme each() ou addClass() ● il est possible d'utiliser $(this) dans ces fonctions pour travailler sur l'élément courant antislashn.org JQuery 49 / 128
  • 50.
    jQuery - bases ● Une bonne pratique de codage JavaScript se doit de séparer la partie HTML de la partie JavaScript ● par de JavaScript dans les balises au niveau des attributs d'événements ● Utiliser jQuery avec $(document).ready() permet de simplifier le suivi de cette bonne pratique ● peut être simplifié en $(function(){ console.log("bonjour jQuery"); }); – mais moins parlant antislashn.org JQuery 50 / 128
  • 51.
    jQuery - bases ● Exemple de base jQuery 01 – Base/exemple_01.html <html> <head> <title>Formation jQuery</title> <style type="text/css"> #box{ color: red; font-size: xx-large; } </style> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript"> exécuté lorsque le DOM sera $(document).ready(function(){ chargé $("#box").click(function(){ console.log($("#box").text()); }); défini la fonction qui sera invoquée }); lorsque l'utilisateur cliquera sur </script> l'élément </head> <body> sélectionne l'élément dont <div id="box">Bonjour</div> l'id est box (sélection CSS) </body> </html> antislashn.org JQuery 51 / 128
  • 52.
    jQuery – lessélecteurs de base ● Fonctionnalité la plus importante de jQuery ● Notation très concise ● cf. http://www.codylindley.com/jqueryselectors/ ● Les sélecteurs de base correspondent aux fonctions getElementById et getElementsByTagName ● $("#box") sélectionne l'élément selon sont id ● $("div") sélectionne tous les éléments de type <div> antislashn.org JQuery 52 / 128
  • 53.
    jQuery – lessélecteurs de base ● Sélection par la classe $(".menu") ● sélectionne tous les éléments de classe CSS menu ● Les sélections peuvent être cumulées au sein d'un même appel à la fonction jQuery $("box, div, .menu") ● sélectionnera – l'élément identifié par box – toutes les balises <div> – tous les éléments de classe CSS menu antislashn.org JQuery 53 / 128
  • 54.
    jQuery – lessélecteurs de base ● Sélection hiérarchique ● comme avec CSS (http://reference.sitepoint.com/css/generalsiblingselector) ● $("#box p")sélectionne tous les descendants <p> de l'élément identifié par box ● sélectionne tous les <p> immédiats $("#box > p") contenus dans l'élément identifié par box ● $("#box ~ p") sélectionne tous les <p> frères de l'élément identifié par box ● $("#box ~ p")sélectionne le <p> frère immédiat de l'élément identifié par box antislashn.org JQuery 54 / 128
  • 55.
    jQuery – sélectionpar filtres ● $("li:first") sélectionne le premier élément de la liste <li> ● $("li:last") sélectionne le dernier élément de la liste <li> ● $("li:even") sélectionne les éléments pairs de la liste <li> - index commence à 0 ● $("li:odd") sélectionne les éléments impairs de la liste <li> - index commence à 0 ● $("li:eq(3)")sélectionne le troisième élément de la liste <li> - index commence à 0 antislashn.org JQuery 55 / 128
  • 56.
    jQuery – sélectionpar filtres ● $("li:gt(2)")sélectionne les éléments suivant l'index 2 de la liste <li> - donc à partir du 4ème éléments ● $("li:lt(2)")sélectionne éléments dont l'indice est inférieur à 2 de la liste <li> - donc les 2er éléments ● $(":header") sélectionne toutes les balises <h> ● sélectionne tous les éléments de $("li:not(li:eq(1))") la liste <li>, sauf celui d'indice 1 ● on peut cumuler les exclusions $("li:not(:first,:last)") antislashn.org JQuery 56 / 128
  • 57.
    jQuery – sélectionpar filtres enfants ● sélectionne les premiers éléments $("ul:first-child") fils <li> de tous les <ul> ● sélectionne les derniers éléments $("ul:last-child") fils <li> des <ul> ● sélectionne tous les 2ème éléments $("li:nth-child(2)") fils – ne commence pas à 0 ● la valeur peut être remplacée par odd ou even ● sélectionne tous les éléments qui $("p:only-child") sont enfants uniques de leur parent <p> antislashn.org JQuery 57 / 128
  • 58.
    jQuery – sélectionpar filtre de contenu ● sélectionne les <div> qui $("div:contains('toto')") contiennent le texte 'toto' ● $("div:empty") sélectionne les <div> qui n'ont pas de de contenu (pas d'enfants ni de texte) ● $("div:parent") sélectionne les <div> qui sont parents (qui ont des enfants et/ou du texte) $("div:has(p)") ● sélectionne les <div> qui possèdent au moins un enfant <p> antislashn.org JQuery 58 / 128
  • 59.
    jQuery – sélectionpar filtre de visibilité ● $("div:visible") sélectionne les <div> qui sont visibles ● $("div:hidden") sélectionne les <div> qui sont cachés antislashn.org JQuery 59 / 128
  • 60.
    jQuery – sélectionpar filtre d'attribut ● L'attribut est manipulé par [attr] ● jusqu'à la version 1.3, il l'était par [@attr] ● $("div[id]") sélectionne les <div> possédant un id ● Il est possible de sélectionner les attributs ayant (ou non) une certaine valeur ● $("div[name='adresse']") sélectionne les <div> dont l'attribut name vaut 'adresse' ● de manière générale la forme est [attr OP valeur] – les opérateurs OP sont détaillées page suivante antislashn.org JQuery 60 / 128
  • 61.
    jQuery – sélectionpar filtre d'attribut ● Opérateurs ● = : égalité ● != : différent ● ^= : commence par ● $= : finit par ● *= : contient ● On peut filtrer sur plusieurs attributs ● retrouve les <input> ayant $("input[id][name='adresse']") un id et dont le name vaut 'adresse' antislashn.org JQuery 61 / 128
  • 62.
    jQuery – méthodesutilitaires ● $.each(collection,callback(index,value)) : applique une fonction sur chaque élément de la sélection ● data(key,value) : associe une paire clé/valeur à un élément sélectionné ● data(key) : lit une valeur par sa clé sur l'élément sélectionné ● cf. http://api.jquery.com/category/utilities/ antislashn.org JQuery 62 / 128
  • 63.
    jQuery – gestiondes attributs ● attr() possède plusieurs signatures permettant ● de connaître la valeur d'un attribut $(this).attr('name') ● de changer la valeur d'un attribut $(this).attr('name','toto') ● de changer la valeur de plusieurs attributs – la collection est alors passée sous la forme d'un objet JSon ● de changer l'attribut à l'aide d'une fonction – les paramètres reçus sont l'indice de l'élément et la valeur de l'attribut antislashn.org JQuery 63 / 128
  • 64.
    jQuery – gestiondes attributs ● Exemple d'utilisation de attr() jQuery 02 – CSS/attr.html function attrLecture(){ alert($("#b1").attr('type')); } function attrEcriture(){ $("li:first").attr('value','premier'); } function attrMap(){ $("li:eq(1)").attr({value:'deuxième',id:'li2'}); } function attrFonction(){ $("li").attr('value',function(index, value){ if(index>1) return "item "+index; }); } antislashn.org JQuery 64 / 128
  • 65.
    jQuery – gestiondes attributs ● removeAttr() supprime un attribut ● val() retourne la valeur (attribut value) d'un élément – permet aussi de changer la valeur, deux signatures ● paramètre correspondant à la nouvelle valeur ● fonction retournant une valeur et prenant en paramètre l'indice de l'élément dans une collection et sa valeur ● Les attributs de classe CSS seront vus plus loins ● Attention : jQuery évolue, en fonction des versions, attr() peut renvoyer une String ou un Boolean ● sur une propriété checked d'un checkbox par exemple – cf. http://api.jquery.com/prop/ antislashn.org JQuery 65 / 128
  • 66.
    jQuery – contenud'un élément ● La méthode text() permet de lire et modifier le contenu d'un élément sous forme textuelle ● text() : lit le contenu texte d'un élément et de ces descendants ● text(textString) : met à jour le contenu d'un élément ● text(function(index,text)) : met à jour le contenu d'un élément par une fonction recevant l'indice de l'élément dans la collection et sa valeur actuelle ● si des balises sont incluses dans les mises à jour, les marques de balisage < et > seront transformés en entité &lt; et &gt; antislashn.org JQuery 66 / 128
  • 67.
    jQuery – contenud'un élément ● La méthode html() permet de lire et modifier le contenu HTML d'un élément ● html() : lit le contenu texte d'un élément et de ces descendants ● html(htmlString) : met à jour le contenu d'un élément ● html(function(index,html)) : met à jour le contenu d'un élément par une fonction recevant l'indice de l'élément dans la collection et sa valeur actuelle ● cette méthode utilise la propriété innerHTML des navigateurs antislashn.org JQuery 67 / 128
  • 68.
    JQuery – gestiondes CSS ● Différentes méthodes permettent de gérer les feuilles de style ● addClass : ajout d'une ou plusieurs classes – si plusieurs classes sont ajoutée, elles sont séparées par un espace – une fonction peut être utilisée pour retourner une ou plusieurs classes, cette fonction reçoit l'indice de l'élément et le nom des classes de cet élément ● removeClass : suppression d'une ou plusieurs classes – mêmes paramètres possibles que addClass antislashn.org JQuery 68 / 128
  • 69.
    jQuery – gestiondes CSS ● Exemple addClass et removeClass jQuery 02 – CSS/addRemoveClass.html $(document).ready(function(){ $("li").mouseover(function(){ $(this).addClass("surligne"); }); $("li").mouseout(function(){ $(this).removeClass("surligne"); }); }); antislashn.org JQuery 69 / 128
  • 70.
    jQuery – gestiondes CSS ● hasClass : vérifie la présence d'une classe CSS – renvoie true ou false ● toggleClass : ajoute ou supprime une classe – ajoute la classe si elle n'est pas présente – supprime la classe si elle est présent – si plusieurs classes sont spécifiées, elles sont séparées par des virgules ● plusieurs signatures existent antislashn.org JQuery 70 / 128
  • 71.
    jQuery – gestiondes CSS ● Un grand nombre de méthodes permettent de retrouver (et changer) les positions et dimensions d'un élément ● la signature sans paramètre retourne un nombre sous forme de String ● la signature avec paramètre change la valeur ● la méthode css() permet de retrouver la valeur d'un attribut de style en gardant l'indication d'unité ● $(this).css('width') pourrait renvoyer 100px ● $(this).width() pourrait renvoyer 100 antislashn.org JQuery 71 / 128
  • 72.
    jQuery – gestiondes CSS ● La méthode css() ● $(this).css('color') permet de récupérer la valeur d'une propriété de style ● permet de mettre à jour les styles au moyen d'un paramètre JSon $(this).css({color :'red', border:'solid 1px'}) – ou une seule propriété $(this).css('color','blue')  ● permet au aussi de mettre à jour les styles au moyen d'une fonction qui reçoit en paramètre l'indice de l'élément dans la collection et la valeur du style – css(propertyName,function(index,value)) antislashn.org JQuery 72 / 128
  • 73.
    jQuery – gestiondes CSS ● Dimensionnement avec jQuery ● height(), width() : hauteur et largeur – interrogation ou mise à jour – signature avec fonction de calcul recevant l'indice dans la sélection et la valeur actuelle ● innerHeight(), innerWidth() : dimension interne – padding inclus et bordure exclue ● outerHeight(), outerWidt() : dimension externe – un booléen est passé à la méthode pour préciser s'il faut inclure le margin ou non ● false (margin non inclus) par défaut antislashn.org JQuery 73 / 128
  • 74.
    jQuery – gestiondes CSS ● Positionnement avec jQuery ● position() : retourne sous forme d'objet {top,left} la position par rapport à l'élément parent ● offset() : retourne sous forme d'objet {top,left} la position relative au document ● scrollTop(), scrollLeft() : modifie le décalage entre un bord du document et l'élément sélectionné antislashn.org JQuery 74 / 128
  • 75.
    jQuery – lesévénements ● Les gestionnaires d'événements de jQuery sont similaires aux événements DHTML ● syntaxe simplifiée – onclick devient click, onmouseover devient mouseover, ... ● par les sélecteurs il est aisé de mettre le même gestionnaire d'événement sur tout un ensemble d'éléments ● facilité de mettre en place du code non intrusif – les différences entre navigateurs sont gommées ● possibilité de passer des données aux événements – format JSon antislashn.org JQuery 75 / 128
  • 76.
    jQuery – lesévénements ● Les événements possèdent deux signatures ● eventName(handler(eventObject)) ● eventName([eventData],handler(eventObject)) – eventName : nom de l'événement ● click, submit, … – handler : fonction qui sera invoquée lors du déclenchement de l'événement ● doit renvoyer false pour arrêter la remontée de l'événement – eventObject : objet de type jQuery.Event qui est automatiquement passé au gestionnaire d'événement ● eventData : données sous forme JSon qui peut être passé au gestionnaire d'événements antislashn.org JQuery 76 / 128
  • 77.
    jQuery – lesévénements ● L'objet jQuery Event ● normalise les différentes implémentation des objets événement des navigateurs ● propriétés normalisée – target, relatedTarget, pageX, pageY, wich, metaKey ● d'autres propriétés sont copiées, qui peuvent être undefined selon l'événement – altKey, bubbles, button, cancelable, charCode, clientX, clientY, screenX, … ● documentation : http://api.jquery.com/category/events/event-object/ antislashn.org JQuery 77 / 128
  • 78.
    jQuery – lesévénements ● Événements du navigateur ● error() : événement invoqué en cas d'erreur JavaScript ● resize() : événement invoqué lors du redimensionnement de la fenêtre du navigateur ● scroll() : événement invoqué lors de l'utilisation des barres de scolling antislashn.org JQuery 78 / 128
  • 79.
    jQuery – lesévénements ● Chargement du document ● load() : invoqué lorsqu'un élément et ses fils ont été complètements chargés – concerne les éléments associés à une URL : image, script, frame, iframe, window ● ready() : invoqué lorsque le DOM est construit – incompatible avec <body onload="..."> – syntaxes équivalentes : ● $(document).ready(handler) ● $().ready(handler) ● $(handler) ● unload() : invoqué lorsque l'utilisateur quitte la page antislashn.org JQuery 79 / 128
  • 80.
    jQuery – lesévénements ● Les événements du formulaire ● blur() : invoqué lors de la perte de focus ● change() : invoqué lors du changement d'un élément de formulaire – changement entre la prise et perte de focus ● focus() : invoqué lors de la prise de focus ● select() : invoqué lors de la sélection d'un texte dans un <input type='text'> ou un <textarea> ● submit() : invoqué lors de la soumission d'un formulaire antislashn.org JQuery 80 / 128
  • 81.
    jQuery – lesévénements ● Les événements clavier ● focusin() : invoqué si un élément ou un de ses fils gagne le focus ● focusout() : invoqué si un élément ou un de ses fils pert le focus ● keydown() : invoqué lors de l'appui d'une touche du clavier ● keypressed() : invoqué lors de l'appui d'une touche du clavier, avec gestion de la répétition ● keyup() : invoqué lors du relâchement d'une touche du clavier antislashn.org JQuery 81 / 128
  • 82.
    jQuery – lesévénements ● Les événements souris ● clic de souris : click(), dblclick() – ces deux événements ne doivent pas être utilisés ensemble sur le même élément ● mouvements de la souris : mousedown(), mouseup(), mousemove(), mouseover() – certains événement IE sont émulés : mouseenter(), mouseleave() ● hover() permet de positionner un handler pour l'entrée et la sortie d'un élément ● toggle() gère les cycles de sélection et dé-selection d'un élément par le clic souris antislashn.org JQuery 82 / 128
  • 83.
    jQuery – lesévénements ● bind() permet de lier un (ou plusieurs) événement, des données et un gestionnaire d'événement à une sélection d'élément ● les éléments du DOM doivent exister lors de la liaison – voir delegate(), ou live() pour attacher des pour des éléments qui ne sont pas encore créer – cf. on() depuis la version 1.7 ● d'autres méthodes jQuery existe pour lier des événements, ou supprimer des événements ● faire attention aux versions de jQuery ● http://api.jquery.com/category/events/event-handler-attachment/ – antislashn.org JQuery 83 / 128
  • 84.
    jQuery – lesformulaires ● jQuery n'ajoute rien de nouveau dans la gestion des formulaires ● Un ensemble de sélecteurs de formulaire permet de sélectionner rapidement un ensemble d'éléments d'un formulaire ● :input, :text, :password, :radio, ... ● Filtres de sélection ● :checked, :selected antislashn.org JQuery 84 / 128
  • 85.
    jQuery – leseffets ● jQuery offre la possibilité d'automatiser certains effets et animations ● à utiliser à bon escient et avec modération ● La plupart des fonctions sur les effets utilise des paramètres optionnels ● speed: 'slow', 'normal' ou 'fast' – ou un nombre en millisecondes ● easing : effet prédéfini personnalisé par plugin ● function : une fonction callback qui sera invoquée à la fin de l'effet ● L'ensemble des effets peut être désactivé par l'instruction jQuery.fx.off = true antislashn.org JQuery 85 / 128
  • 86.
    jQuery – leseffets ● Effets de base ● hide() : cache la sélection ● show() : affiche la sélection ● Glissements ● slideDown() : fait apparaître, par glissement vers le bas, un élément ● slideUp() : fait disparaître, par glissement vers le haut, un élément antislashn.org JQuery 86 / 128
  • 87.
    jQuery – leseffets ● Effets de fondu ● fadeIn() : fait apparaître un élément avec effet de fondu ● fadeOut() : fait disparaitre un élément avec effet de fondu ● fadeTo() : modifie l'opacité de l'élément sélectionné ● Différer un effet ● la méthode delay() permet de différer un effet $("div.effet").slideUp(300).delay(2000).fadeIn(600); antislashn.org JQuery 87 / 128
  • 88.
    jQuery – leseffets ● Passer d'un effet à l'autre ● toggle() : bascule un élément d'invisible à visible, et inversement ● toggle(function1,fucntion2) : bascule d'une fonction à l'autre à chaque clic sur l'élément ● slideToggle() : bascule de slideUp vers slideDown et inversement ● fadeToggle() : bascule de visible à invisible par effet de fondu, et inversement antislashn.org JQuery 88 / 128
  • 89.
    jQuery – leseffets ● animate() permet de créer une animation ● un paramètre obligatoire sous forme d'objet JSon fournit les styles à animer ● en plus des paramètres optionnels de vitesse, easing et fonction callback animate({fontSize:"24px", left:300, width: "200px", opacity: 0.5},1000 ) antislashn.org JQuery 89 / 128
  • 90.
    jQuery – parcourirle DOM ● Le parcours du DOM est conforme à ce qui est habituellement utilisée avec l'API DOM 3 ● traversée en Java, JavaScript ou XPath ● On retrouve donc l'ensemble des fonctionnalités usuelles ● retrouver les enfants, parents, … ● mais avec un vocabulaire qui n'est pas le même que l'API du W3C antislashn.org JQuery 90 / 128
  • 91.
    jQuery – parcourirle DOM ● L'ensemble des méthodes jQuery de parcours du DOM renvoie un objet jQuery, ce qui permet de chaîner les appels ● La documentation complète est accessible sur le lien : http://api.jquery.com/category/traversing/tree-traversal/ ● Les pages suivantes résument les méthodes de parcours du DOM antislashn.org JQuery 91 / 128
  • 92.
    jQuery – parcourirle DOM ● children() : renvoie une collection d'éléments enfants immédiats de chaque élément sélectionné ● parent() : renvoie le parent immédiat de chaque élément sélectionné ● parents() : renvoie une collection d'éléments ancêtres de chaque élément sélectionné ● parentUntil() : renvoie une collection d'éléments ancêtres de chaque élément sélectionné, jusqu'à un élément (ou sélecteur) passé à la fonction ● antislashn.org JQuery 92 / 128
  • 93.
    jQuery – parcourirle DOM ● siblings() : renvoie les frères de chaque élément de la sélection ● prev() : renvoie le frère immédiatement précédent de chaque élément de la sélection ● prevAll() : renvoie les frères précédents de chaque élément de la sélection ● prevUntil() : renvoie les frères précédents de chaque élément de la sélection, jusqu'à un élément désigné par le sélecteur antislashn.org JQuery 93 / 128
  • 94.
    jQuery – parcourirle DOM ● next() : renvoie le frère immédiatement suivant de chaque élément de la sélection ● nextAll() : renvoie les frères suivants de chaque élément de la sélection ● nextUntil() : renvoie les frères suivants de chaque élément de la sélection, jusqu'à un élément désigné par le sélecteur antislashn.org JQuery 94 / 128
  • 95.
    jQuery – parcourirle DOM ● content() : renvoie tous les nœuds enfants de chaque élément de la sélection ● closest(selecteur) : renvoie le parent le plus proche de chaque élément sélectionné répondant au sélecteur ● find(selecteur) : renvoie les descendants de chaque élément sélectionné répondant au sélecteur ● find(param) : ajoute les éléments fournis en agruments (élément, sélecteur ou HTML) antislashn.org JQuery 95 / 128
  • 96.
    jQuery – manipulerle DOM ● Nous avons déjà vu les méthodes text() et html() ● Les pages suivantes présente les méthodes de manipulation du DOM, sans les détailler ● comme habituellement sous jQuery, la plupart des méthodes prennent en paramètre un contenu ou une fonction renvoyant un contenu ● cf. http://api.jquery.com/category/manipulation/ antislashn.org JQuery 96 / 128
  • 97.
    jQuery – manipulerle DOM ● text() et html() : modification du contenu ● append() : ajout à l'intérieur de l'élément sélectionné, en mode ajout ● after() : ajout après l'élément sélectionné ● before() : ajout avant l'élément sélectionné ● wrap() : ajout autour de l'élément sélectionné ● wrapAll() : ajout autour tous les éléments de la sélection ● wrapInner() : ajout autour des enfants de l'élément sélectionné ● unwrap() : annule l'action de wrap() antislashn.org JQuery 97 / 128
  • 98.
    jQuery – manipulerle DOM ● replaceWith() : remplace l'élément sélectionné par le contenu spécifié ● remove() : supprime du DOM tous les éléments répondant aux critères de sélection ● detach() : comme remove(), mais en conservant les données associées ● clone() : copie les éléments antislashn.org JQuery 98 / 128
  • 99.
    jQuery – filtressur le DOM ● filter(expression) : réduit l'ensemble des éléments sélectionnés à ceux qui passe le filtre ● eq(index) : réduit l'ensemble des éléments sélectionnés à celui correspond à la position ● slice(debut[,fin]) : réduit l'ensemble des éléments sélectionnés à ceux qui sont entre deux positions ● is(expression) : indique si la sélection répond à un critère, renvoie true ou false ● first() et last() : réduit l'ensemble des éléments sélectionnés au premier ou dernier item ● has(selecteur) : réduit l'ensemble des éléments sélectionnés à ceux qui ont un descendant correspondant au sélecteur antislashn.org JQuery 99 / 128
  • 100.
    jQuery – lescaractères spéciaux ● jQuery utilise un certain nombre de caractères comme éléments de syntaxe ● Si ces caractères sont utilisés dans des expressions littérales, il faut les échapper avec deux caractères backslash - ● Liste des caractères spéciaux ● # ; & , . + * ~ ' : ! ^ $ [ ] ( ) = > | / antislashn.org JQuery 100 / 128
  • 101.
    jQuery - AJAX ● jQuery facilite l'écriture du code AJAX ● AJAX nécessite aussi de la programmation côté serveur ● ce qui signifie : – un langage : PHP, ASP, .NET, Java, … – un serveur : Apache, IIS, Tomcat, Jboss, … – une base de données : MySql, Oracle, SQLServer, Derby, … ● La programmation côté serveur n'est pas abordée ici ● Il est intéressant, si ce n'est essentiel, de mettre en place des outils de suivi des requêtes AJAX dans le navigateur antislashn.org JQuery 101 / 128
  • 102.
    jQuery - AJAX ● load(url [,datas] [,function]) ● charge une ressource dans la sélection – url : url de la ressource – datas : pairs clé/valeur envoyées au serveur ● si aucune données la méthode GET est utilisée – function : fonction à exécuter en cas de réussite de la requête ●retourne un objet jQuery ● loadIfModified(url [,datas] [,function]) ● ne charge la ressource que si celle si est modifiée ● même fonctionnement que load() antislashn.org JQuery 102 / 128
  • 103.
    jQuery - AJAX ● Exemple de code load() ● onglet Network de Chrome jQuery 04 – Ajax/load.html $(document).ready(function(){ $("#conteneur").load("test.html"); }) ressource à charger <div id='conteneur></div> antislashn.org JQuery 103 / 128
  • 104.
    jQuery - AJAX ● $.get(url [,datas] [,function] [,type]) ● effectue une requête AJAX avec une méthode HTTP GET – url : ressource à charger – datas : paires clé/valeur envoyées au serveur – function : fonction à exécuter en cas de réussite de la requête – type : type de la réponse fournie à la fonction callback ● String pouvant être : xml, html, script, json, jsonp, text ● renvoie un objet XMLHttpRequest antislashn.org JQuery 104 / 128
  • 105.
    jQuery - AJAX ● $.post(url [,datas] [,function] [,type]) ● effectue une requête AJAX avec une méthode HTTP POST – url : ressource à charger – datas : paires clé/valeur envoyées au serveur – function : fonction à exécuter en cas de réussite de la requête – type : type de la réponse fournie à la fonction callback ● String pouvant être : xml, html, script, json, jsonp, text ● renvoie un objet XMLHttpRequest antislashn.org JQuery 105 / 128
  • 106.
    jQuery - AJAX ● $.getSrcipt(url[,function]) ● charge une script via la méthode HTTP GET et l'exécute – url : script à charger – function : fonction à exécuter en cas de réussite de la requête ● renvoie un objet XMLHttpRequest $(document).ready(function(){ $.getScript("hello.js"); }); antislashn.org JQuery 106 / 128
  • 107.
    jQuery - AJAX ● Les méthodes précédentes sont des raccourcis de l'utilisation de la méthode $.ajax() ● La méthode ajax() permet de maîtriser complètement le fonctionnement de l'objet XMLHttpRequest ● Les paramètres de la fonction sont fournis sous la forme d'un objet JSon ● cf. http://api.jquery.com/jQuery.ajax/ antislashn.org JQuery 107 / 128
  • 108.
    jQuery - AJAX ● La méthode ajax() permet de s'adapter à tous les cas de figure ● authentification, cross domaine, ajout dans le header de la requête, … ● bien étudier la documentation $(document).ready(function(){ $.ajax({ url: 'teste.html', success: function(data){ $('#conteneur').html(data); }, error: function(xhr,status,error){ console.log(status); console.log(error); }, }); }); antislashn.org JQuery 108 / 128
  • 109.
    jQuery - AJAX ● Événements associés à la requête AJAX ● ajaxSend(function) : assigne une fonction callback qui sera exécutée avant l'envoi de la requête ● ajaxStart(function) : assigne une fonction callback qui sera exécutée lors du début de la requête ● ajaxStop(function) : assigne une fonction callback qui sera exécutée à la fin de toutes les requêtes ● ajaxSuccess(function) : assigne une fonction callback qui sera exécutée en cas de succès de la requête ● ajaxComplete(function) : assigne une fonction callback qui sera exécutée à la fin complète de la requête ● ajaxError(function) : assigne une fonction callback qui sera exécutée en cas de d'erreur sur la requête antislashn.org JQuery 109 / 128
  • 110.
    jQuery - AJAX ● Fonctions utilitaires (helpers) ● serialize() : encode un formulaire en String pouvant être soumis au serveur ● serializeArray() : encode un formulaire en un tableau JSon de clé/valeurs antislashn.org JQuery 110 / 128
  • 111.
    jQuery – constructiond'une popup ● Pour illustrer la prise en main de jQuery, nous allons créer une popup d'identification ● deux champs de saisie : user et password ● Pour valider la saisie un script vallidation.js vérifie si le champ est remplit ou non ● ce script créé un événement personnalisé qui sera appelé ensuite sur des événement du DOM antislashn.org JQuery 111 / 128
  • 112.
    jQuery – constructiond'une popup ● script de validation ● le fichier validation.js doit être ajouter avant le script AuthPopup.js $(":text,:password").live('validation',function(){ var val = $.trim($(this).val()); var errorMessage=[]; if($(this).hasClass('required') && val=="") errorMessage.push("Champ obligatoire"); var isOk = errorMessage.length==0; var msg; if(!isOk) msg = "<div class='error'>"+errorMessage.join('<br/>')+"</div>"; if($(this).next().is("div.error")) $(this).next().remove(); $(this).after(msg); $(this).data("isValid",isOk); }); antislashn.org JQuery 112 / 128
  • 113.
    jQuery – constructiond'une popup ● Création d'un objet JavaScript AuthPopup qui permettra ● de créer le code HTML ● d'ajouter des événements – pour la validation du formulaire ● d'afficher le formulaire ● d'envoyer les informations au serveur ● de cacher le formulaire antislashn.org JQuery 113 / 128
  • 114.
    jQuery – constructiond'une popup ● Structure de base JavaScript var AuthPopup = { create: function(){}, addEvents: function(){}, show: function(){}, sendToServer: function(){}, hide: function(){} }; antislashn.org JQuery 114 / 128
  • 115.
    jQuery – constructiond'une popup ● La mise en place du HTML est confiée à la fonction create() create: function(){ var html=[]; var i=0; html[i++] = "<div id='authPopup'>"; html[i++] = "<form>"; html[i++] = "<div id='header'>Identifiez-vous<div id='cmdCancel'>x</div></div>"; html[i++] = "<div id='body'>"; html[i++] = "<div><label for='user'>User </label>"; html[i++] = "<input type='text' id='user' class='required'/></div>"; html[i++] = "<div><label for='pswd'>Password </label>"; html[i++] = "<input type='password' id='pswd' class='required'/></div>"; html[i++] = "<div><input type='submit' id='cmdSend' value='OK'/></div>" html[i++] = "</form>"; html[i++] = "</div>"; $('body').append(html.join("")); $('body').append("<div id='overlay'></div>"); }, antislashn.org JQuery 115 / 128
  • 116.
    jQuery – constructiond'une popup ● L'affichage de la popup est confiée à la méthode show() show: function(){ if($("#authPopup").size() == 0){ this.create(); this.addEvents(); } var top = $(window).scrollTop()+($(window).height() - $('#authPopup').height())/2; var left = $(window).scrollLeft()+($(window).height() - $('#authPopup').height())/2; $("#authPopup") .css('top',Math.max(0,top)) .css('left',Math.max(0,left)) .slideDown('slow') .find(':text,textarea').first().focus(); $("#overlay").fadeIn(); }, antislashn.org JQuery 116 / 128
  • 117.
    jQuery – constructiond'une popup ● La fermeture de la popup est gérée par la méthode hide() hide: function(){ $("#authPopup").slideUp('slow',function(){ $("#overlay").fadeOut(); }); } antislashn.org JQuery 117 / 128
  • 118.
    jQuery – constructiond'une popup ● Les événements sont ajoutés par la méthode addEvents() ● la méthode de validation est liée à l'événement du DOM par la méthode trigger() ● la croix doit fermer la popup – le proxy est utilisé pour garder de la popup lors de l'appel de hide() ● l'appui sur la touche OK doit soumettre le formulaire antislashn.org JQuery 118 / 128
  • 119.
    jQuery – constructiond'une popup ● Code de la fonction addEvents() addEvents: function(){ $(":text, :password").live("blur",function(){ $(this).trigger("validation"); }); $("#cmdCancel").click($.proxy(this.hide,AuthPopup)); $("#authPopup").children("form").submit( {"popup":this}, function(event){ if($('#user').val()=="" || $('#pswd').val()==""){ alert("Formulaire incomplet"); } else{ event.data.popup.sendToServer(); event.data.popup.hide(); } return false; }); }, antislashn.org JQuery 119 / 128
  • 120.
    jQuery – constructiond'une popup ● Code de la méthode addEvents() ● Enregistrement de l'événement click – une première approche aurait pu donner ceci : $("#cmdCancel").click(this.hide); ● ● mais dans le contexte de l'appel de l'événement this est le bouton submit !!! – jQuery fournit $.proxy() qui permet de définir le contexte d'exécution d'une fonction $("#cmdCancel").click($.proxy(this.hide,AuthPopup)); ● ● lors de l'appel de $.proxy() this fait référence à AuthPopup – le 2nd paramètre est le contexte dans lequel doit être appelée la méthode, AuthPopup qui est l'objet aurait pu être remplacé par this antislashn.org JQuery 120 / 128
  • 121.
    jQuery – constructiond'une popup ● Code de la méthode addEvents() ● soumission du formulaire (extraits de code) $("#authPopup").children("form").submit({"popup":this},function(event)... – – un objet est passé à submit(), cet objet référencie dans la propriété popup l'objet AuthPopup – cet objet est lié à l'objet event qui sera passé à la fonction callback – il devient alors d'appeler les méthode de l'objet AuthPopup avec le bon contexte event.data.popup.sendToServer(); event.data.popup.hide(); ● la méthode addEvent() retourne false pour stopper la soumission antislashn.org JQuery 121 / 128
  • 122.
    jQuery – constructiond'une popup ● L'envoi des données au serveur est confiée à la méthode sendToServer() sendToServer: function(){ $.ajax({ 'url':'authentification', 'type':'POST', 'context':this, 'data':{ 'user':$("#user").val(), 'pswd':$("#pswd").val() }, 'success':function(){ console.log("envoi réussi"); } }); }, antislashn.org JQuery 122 / 128
  • 123.
    jQuery – constructiond'une popup ● Pour l'instant aucune feuille de style n'a été définie ● Notre popup ressemble à cela ● la feuille de style AuthPopup.js permet d'obtenir antislashn.org JQuery 123 / 128
  • 124.
    jQuery – lesplugins ● jQuery peut être étendu à l'aide de plugin ● le développement des plugins n'entre pas dans cette présentation ● largement documenté sur le web ● jQuery possède une large gamme de plugins ● Tous les plugins se basent sur jQuery, il faut donc inclure la bibliothèque jQuery, et les bibliothèques des plugins ● Deux plugins sont maintenus par le projet jQuery ● jQuery UI et jQuery mobile antislashn.org JQuery 124 / 128
  • 125.
    UI ● Permet d'ajouter au projet des effets visuels, des widgets ● onglets, calendriers, boites de dialogue, barre de progression, … ● Le téléchargement des bibliothèques peut être personnalisé ● cf. http://jqueryui.com/download – les composants peuvent êtes ajoutés un par un antislashn.org JQuery 125 / 128
  • 126.
    UI ● Les widgets sont contrôlés par : ● le fichier JavaScript ● le fichier des CSS ● un répertoire des images ● Il faut donc ajouter à la page ● adapter les chemins et noms de fichier si nécessaire <link type="text/css" href="css/smoothness/jquery-ui-1.8.18.custom.css" rel="Stylesheet" /> <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript" src="js/jquery-ui.js"></script> antislashn.org JQuery 126 / 128
  • 127.
    Bibliographie ● AJAX – Le guide complet ● auteurs : Bruno CATTEAU et Nicolas FAUGOUT ● éditeur : Micro Application ● JQuery – Découverte du framework JavaScript ● auteur : Luc VAN LANCKER ● éditeur : ENI éditions ● JQuery – Le guide complet ● auteurs : Guillaume ALLAIN et Timothy STUBBS ● éditeur : Micro Application antislashn.org JQuery 127 / 128
  • 128.
    Ressources web ● Sites officiels ● http://jquery.com/ ● http://www.json.org/ ● http://www.w3.org/ ● http://www.w3schools.com/ ● Blogs ● http://www.codylindley.com/jqueryselectors/ ● www.mathieurobin.com/category/devweb/javascript/jquery/ antislashn.org JQuery 128 / 128