Évènements, fonctions callback, closure

Documents pareils
NFA016 : Introduction. Pour naviguer sur le Web, il faut : Naviguer: dialoguer avec un serveur web

Document Object Model (DOM)

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

TP JAVASCRIPT OMI4 TP5 SRC

AUVRAY Clément (168187) HOMBERGER Alexandre (186897) GLADE. Langages, outils et méthodes pour la programmation avancée Page 1 sur 12

Les calques supplémentaires. avec Magix Designer 10 et autres versions

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

SYSTÈMES D INFORMATIONS

Introduction. PHP = Personal Home Pages ou PHP Hypertext Preprocessor. Langage de script interprété (non compilé)

Module pour la solution e-commerce Magento

HTML, CSS, JS et CGI. Elanore Elessar Dimar

FTP : File TRansfer Protocol => permets d envoyer des gros fichiers sur un serveur (ou de télécharger depuis le serveur)

Tutoriel Sage One Edition Expert-Comptable. - Le cabinet d Expertise-Comptable doit appeler le Service Client Sage One au

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Tableau de bord. Tableau de bord. Statistiques des contenus de votre site (nb de pages, articles, commentaires...)

Extended communication server 4.1 : VoIP SIP service- Administration

Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.

Studio. HERITIER Emmanuelle PERSYN Elodie. SCHMUTZ Amandine SCHWEITZER Guillaume

Programmation Web. Madalina Croitoru IUT Montpellier

ZOTERO. Installation. Bibliothèque de Pharmacie. Service Formation

DOM - Document Object Model

Tutoriel n 3. Comment préparer votre support de présentation (vidéo)? Plugin «rich media» pour Moodle 2

CRÉER, ROUTER ET GÉRER UNE NEWSLETTER, UN ING

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Démonstration de la mise en cache via HTML 5 sur iphone

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

KWISATZ MODULE PRESTASHOP

- Université Paris V - UFR de Psychologie ASDP4 Info Introduction à Windows

KWISATZ_TUTO_module_magento novembre 2012 KWISATZ MODULE MAGENTO

SPECIFICATIONS TECHNIQUES : Gestion des Médicaments et des commandes de médicaments

L envoi d un formulaire par courriel. Configuration requise Mail Texte Mail HTML Check-list

CARPE. Documentation Informatique S E T R A. Version Août CARPE (Documentation Informatique) 1

Google Webmaster Tools

Déclarer un serveur MySQL dans l annuaire LDAP. Associer un utilisateur DiaClientSQL à son compte Windows (SSO)

Guide d installation CLX.PayMaker Office (3PC)

Google Tag Manager v2 v1 dispo sur GTM pour les nuls dispo sur

Les outils marketing. Page 1

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Ajax, RIA et HTML Prise en charge d Ajax

La programmation orientée objet et le langage C++

INSTALLATIONS. Vous adapterez l installation en fonction des nouvelles versions qui peuvent légèrement différer.

Utiliser Dev-C++ .1Installation de Dev-C++ Table des matières

Sélection du contrôleur

E-TRANSACTIONS. Guide du programmeur API Plug-in. Version 1.1

Créer un site Web : mode d emploi Sous SPIP, avec le squelette «établissement» de l académie de Versailles

Étape 1 / CHOISIR UN HÉBERGEMENT

< Atelier 1 /> Démarrer une application web

Principe de fonctionnement du lanceur d'application "AdisTlsStartCfgLotus"

Table des matières L INTEGRATION DE SAS AVEC JMP. Les échanges de données entre SAS et JMP, en mode déconnecté. Dans JMP

mon site web via WordPress

Unix/Linux I. 1 ere année DUT. Université marne la vallée

Auteur LARDOUX Guillaume Contact Année 2014 DEVELOPPEMENT MOBILE AVEC CORDOVA

Déclarer un serveur MySQL dans l annuaire LDAP. Associer un utilisateur DiaClientSQL à son compte Windows (SSO)

CREER ET ANIMER SON ESPACE DE TRAVAIL COLLABORATIF

Configuration du FTP Isolé Active Directory

25 mars. Tutoriel sur Laravel. Préparé par : Lydiane Beaulne-Bélisle. Ceci est un tutorial qui montre comment débuter avec le Framework PHP Laravel.

Failles XSS : Principes, Catégories Démonstrations, Contre mesures

FORMATION MULTIMÉDIA LVE

Introduction à Eclipse

K?ellaWeb Saisie des absences, retards et sanctions APLON en mode Web

Manuel d installation de Business Objects Web Intelligence Rich Client.

SEO On-page. Avez-vous mis toutes les chances de votre côté pour le référencement de votre site?

Devenez un véritable développeur web en 3 mois!

Documentation utilisateur. [EIP] TransLSF

Projet en nouvelles technologies de l information et de la communication

Evaluation et mise en place d un serveur de messages pour Chamilo 2.0

Mise à jour d avast! et de vos logiciels Ciel

SPECIFICATIONS TECHNIQUES BANNIERES SITES PRISMA / TABLETTES / MOBILE

Présentation, mise en place, et administration d'ocs Inventory et de GLPI

Optimiser pour les appareils mobiles

Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.

M06/5/COMSC/SP1/FRE/TZ0/XX INFORMATIQUE NIVEAU MOYEN ÉPREUVE 1. Mardi 2 mai 2006 (après-midi) 1 heure 30 minutes INSTRUCTIONS DESTINÉES AUX CANDIDATS

CHAPITRE 11. Temps réel Remy Sharp

Le langage C. Séance n 4

Dans cette Unité, nous allons examiner

Introduction à MATLAB R

Manuel Utilisateur. Boticely

L informatique en BCPST

Utiliser Freemind à l'école

Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des Bases de Données avec PHP

Une clé USB transformée en bureau portable. Ou comment transporter son environnement de travail dans sa poche

Soon_AdvancedCache. Module Magento SOON. Rédacteur. Relecture & validation technique. Historique des révisions

Chapitre 1. Prise en main

Sécurité des applications web. Daniel Boteanu

Tutoriel Prise en Main de la Plateforme MetaTrader 4. Mise à jour : 7/09/

Microsoft Application Center Test

D'UN SITE INTERNET LES S D'UN SITE INTERNET PRATIQUE ET PERFORMANT PRATIQUE ET PERFORMANT

Premiers Pas en Programmation Objet : les Classes et les Objets

Déploiement d application Silverlight

Déploiement de SAS Foundation

En date du 11 décembre 2008

Rapport Full-delegate Tests de charge. Rapport 1 : Dakotabox

Canvas 3D et WebGL. Louis Giraud et Laetitia Montagny. 9 Avril Université Lyon 1

HMI target Visu / PLC HMI. Pour réaliser une interface homme machine avec PLC control

Guide des Spécifications Techniques

Module BD et sites WEB

Installation / Sauvegarde Restauration / Mise à jour

The Mozilla Art Of War. David Teller. 20 septembre Laboratoire d Informatique Fondamentale d Orléans. La sécurité des extensions.

Transcription:

Évènements, fonctions callback, closure Programmation événementielle est un langage de programmation évènementielle. Au lieu d exécuter des instructions de façon séquentielle, les diverses fonctions sont exécutées selon les évènements qui seront captés, comme par exemple un clic de souris, l appui sur une touche donnée, etc. Capteurs d évènements et fonctions callback Version Historiquement, les éléments peuvent capter un évènement en leur ajoutant un attribut comme onclick par exemple : <a href="somewhere.html" onclick="alert('on a cliqué! )"> Cette solution permet de facilement ajouter des interactions dans une page web, mais possède un inconvénient majeur : la définition des évènements à capter est mélangée au code et ne permet donc pas la séparation du contenu et de la logique des interactions. Capteur d évènement en Pour permettre de séparer les interactions et le code, on peut ajouter un capteur d évènement sur un élément de façon programmatique. Deux possibilités pour faire cela : monelement.onclick = faireaction; // attention sans parenthèses!! monelement.addeventlistener( click, faireaction, false); // version DOM Events La référence à l action à exécuter (ici faireaction) est ce qu on appelle un callback : il s agit juste de définir le nom de l action à exécuter, ce qui est différent d un appel à une fonction (qui serait alors fait avec des parenthèses : faireaction(); ) Le DOM permet aussi d enlever un capteur d évènement : monelement.removeeventlistener( click, faireaction, false); Fonctions callback Une fonction callback est une fonction passée en paramètre. C est typiquement ce qui se passe avec l instruction monelement.addeventlistener( click, faireaction, false). La fonction faireaction sera exécutée lorsque l évènement click est capté. La difficulté des fonctions callback par rapport à la programmation classique est que l on ne peut pas choisir les arguments de la fonction. En, toute fonction callback exécutée suite à la captation d un évènement reçoit en argument l objet de type Event.

L objet Event en L objet Event de contient des informations sur l évènement et des méthodes pour agir (par exemple pour l arrêter). Propriétés : target : c est l élément sur lequel se trouve la souris lorsque l évènement est capté currenttarget : c est l élément qui a capté l événement (peut être différent de target) type : le type de l élément (click, focus, mouseover, etc.) Méthodes : stoppropagation : stoppe la propagation de l évènement dans l arbre DOM (cf. plus bas) preventdefault : empêche l élément qui a capté l évènement de déclencher l action implicite. Par exemple si un élément <a> capte un clic, alors le lien est activé, sauf si on l y empêche avec la méthode preventdefault(). Exemple : <a id= test href= http://google.com >bla bla </div> document.getelementbyid( test ).addeventlistener( click, stoppelien); function stoppelien(ev) { console.log(ev.type); ev.preventdefault(); // empêche le lien d être activé lors du clic Propagation des évènements Après la capture d un évènement, celui-ci remonte à la surface de l arbre DOM (phase de bubbling). Si plusieurs éléments dans la branche du DOM doivent capter le même type d évènement, alors l élément le plus profond dans l arbre capte l élément en premier puis l évènement est alors capté par ses ancêtres jusqu à la racine du document. Exemple : <div id= elt1 > <p id= elt2 >un texte <strong id= elt3 >en gras</strong></p> </div> document.getelementbyid('elt1').addeventlistener('click', affiche1); document.getelementbyid('elt2').addeventlistener('click', affiche2); document.getelementbyid('elt3').addeventlistener('click', affiche3); function affiche1(ev) { console.log("élément elt1 a capté le clic");

function affiche2(ev) { console.log("élément elt2 a capté le clic"); function affiche3(ev) { console.log("élément elt3 a capté le clic"); function affiche(ev) { console.log(ev.currenttarget); Exécution lorsque l on clique sur le texte en gras, la console affiche alors : Élément elt3 a capté le clic Élément elt2 a capté le clic <p id="elt2"> Élément elt1 a capté le clic <div id="elt1"> Fonctions anonymes permet l utilisation de fonction anonymes, qui permettent parfois d écrire un code plus concis. Exemple monelt.onclick = function(ev) { console.log( evenement capté ); Fonction anonyme et évènement load Toute page web possède l évènement load sur l objet window qui est déclenché lorsque la page est complètement chargée, c est à dire que le navigateur a reçu tout le code de la page. On utilise cet évènement pour initialiser les interactions de la page web : Objet this window.onload = function() { // mettre les capteurs d évènements document.getelementbyid( test ).addeventlistener( click, faireaction, false); // En programmation orientée objet, le mot-clé this désigne en général l objet dans lequel le code se trouve. C est par exemple le cas avec les langages Java ou PHP entre autres. Dans la cadre de son utilisation en, this peut lui aussi désigner l objet dans le

quel on travaille, mais lorsque est utilisé en programmation évènementielle, l objet this est alors l objet qui a capté l évènement déclencheur de l action en cours. Exemple <div id= elt >une div qui capte en clic</div> document.getelementbyid('elt').addeventlistener('click', affiche); function affiche(ev) { console.log("élément elt a capté le clic"); console.log(ev.currenttarget); // affiche <div id= elt > en console car c est l élément qui a capté le clic console.log(this); Notion de closure En, une fonction peut être contenue dans une fonction parente, par exemple: var parent = function(jour, mois) { var afficher = function() { var ladate = new Date(annee, mois, jour); console.log('the date entered is ' + ladate.todatestring()); var annee = 2015; afficher(); parent(12, 2); // affiche : The date entered is Thu Mar 12 2015 afficher(); // ReferenceError: afficher is not defined La fonction afficher() est seulement définie à l intérieur de la fonction parent(). Mais la notion de closure est le fait que la sous-fonction a accès aux variables de la fonction englobante. Elle a accès aux variables locales dans sa portée, puis aux variables de la fonction englobante (et ses paramètres), et enfin aux variables globales. Les closures sont beaucoup utilisées en et il est important de connaitre leurs principes de base. Attention cependant, la closure stocke une référence vers les variables de la fonction englobante, et non leur valeur. Cela pose alors parfois des problèmes si la valeur d une variable change avant l exécution de la closure (ou pendant son exécution). L exemple typique est avec l utilisation de boucles. Prenons l exemple fourni pat SitePoint (voir lien plus bas) :

<html lang="en"> <head> <title>closures</title> <meta charset="utf-8" /> <script> window.addeventlistener("load", function() { for (var i = 1; i < 4; i++) { var button = document.getelementbyid("button" + i); button.addeventlistener("click", function() { console.log( Clicked button " + i); ); ); </script> </head> <body> <input type="button" id="button1" value="one" /> <input type="button" id="button2" value="two" /> <input type="button" id="button3" value="three" /> </body> </html> Quel que soit le bouton cliqué, cela affichera Clicked button 4 puisque la boucle est forcément finie avant qu un bouton ne soit cliqué, et donc i vaut 4. La solution est alors de découpler la closure de la boucle. La solution est expliquée dans le tutoriel de SitePoint : http://www.sitepoint.com/javascript-closures-demystified/ Autre tutoriel sur les closures : http://javascriptissexy.com/understand-javascript-closures-with-ease/ Conclusion La gestion des évènements avec nécessite de l entrainement pour s extraire de la logique de la programmation séquentielle. La séparation du code et de la logique des interactions permet de créer des bibliothèques de fonctionnalités en qui seront réutilisées dans diverses pages web. Les closures sont difficiles à maitriser lorsque l on débute en. Nous serons amenés à les utiliser lors de divers exercices manipulant l arbre DOM et utilisant la gestion d évènements.