JavaScript, langage et utilisation

Documents pareils
TP JAVASCRIPT OMI4 TP5 SRC

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Utilisation d objets : String et ArrayList

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

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

Programmation Web. Madalina Croitoru IUT Montpellier

Présentation du langage et premières fonctions

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

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

.. CSS. Damien Nouvel. Damien Nouvel (Inalco) CSS 1 / 15

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

Introduction à MATLAB R

HTML, CSS, JS et CGI. Elanore Elessar Dimar

Recherche dans un tableau

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Algorithmique et Programmation, IMA

as Architecture des Systèmes d Information

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

I. Introduction aux fonctions : les fonctions standards

TP 1. Prise en main du langage Python

Programmation C++ (débutant)/instructions for, while et do...while

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

DOM - Document Object Model

Programmer en JAVA. par Tama

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

Document Object Model (DOM)

Initiation à la programmation en Python

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

Langage Java. Classe de première SI

Bases de programmation. Cours 5. Structurer les données

Java Licence Professionnelle CISII,

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

HTML. Notions générales

Le stockage local de données en HTML5

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

RAPPORT AUDIT SEO. Élaboré à l'attention de : Monsieur Greber Élaboré par : Cédric Peinado

STAGE IREM 0- Premiers pas en Python

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr


Cours Informatique Master STEP

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

1. La notion de cascade

HTML5, CSS3 et JavaScript Développez vos sites pour les terminaux mobiles

Compte-rendu de projet de Système de gestion de base de données

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Guide de réalisation d une campagne marketing

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Formulaire pour envoyer un mail

{less} Guide de démarrage

Généralités sur le Langage Java et éléments syntaxiques.

Flex. Lire les données de manière contrôlée. Programmation Flex 4 Aurélien VANNIEUWENHUYZE

Initiation à html et à la création d'un site web

Premiers Pas en Programmation Objet : les Classes et les Objets

INF 321 : mémento de la syntaxe de Java

Cours 1: Java et les objets

Programmation Objet - Cours II

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

INITIATION AU LANGAGE JAVA

Intégrateur Web HTML5 CSS3

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Initiation à LabView : Les exemples d applications :

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

TP1. Outils Java Eléments de correction

Les chaînes de caractères

TP1 : Initiation à Java et Eclipse

Claude Delannoy. 3 e édition C++

Notes pour l utilisation d Expression Web

Plan du cours. Historique du langage Nouveautés de Java 7

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

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Langage HTML (2 partie) <HyperText Markup Language> <tv>lt La Salle Avignon BTS IRIS</tv>

Cours d initiation à la programmation en C++ Johann Cuenin

Formation HTML / CSS. ar dionoea

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

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Comment développer et intégrer un module à PhpMyLab?

Programmation en Java IUT GEII (MC-II1) 1

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Présentation du Framework BootstrapTwitter

Malgré son aspect spartiate, Freeplane offre de nombreuses fonctionnalités en particulier dans le domaine de la diffusion des cartes sur le Web.

Programme Compte bancaire (code)

Notions fondamentales du langage C# Version 1.0

TD3: tableaux avancées, première classe et chaînes

L'accessibilité des applications web mobiles

Tutoriel : Feuille de style externe

ALGORITHMIQUE ET PROGRAMMATION En C

JOOMLA 1.5 avancé SUPPORT DE COURS + annexe

Corrigé des exercices sur les références

IMPORTATION, CRÉATION, MANIPULATION, EXPORTATION DE DONNÉES STATISTIQUES

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Description des pratiques à adopter pour la mise à jour du layout en utilisant le gestionnaire de conception de Sharepoint 2013

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Chapitre 2 Devine mon nombre!

Transcription:

Introduction JavaScript, langage et utilisation Langage côté CLIENT Javascript n'est pas java! intégré aux navigateurs: pas de problème de déploiement comme avec les applets java ou flash permet de rendre les applications plus intéractives Les inconvénients : Les règles : problèmes de standardisation (tendent à se réduire) pas forcément activé (c.f. extension NoScript pour firefox) ; un robot (ex. google) ne sais pas naviguer en utilisant JavaScript. un site doit pouvoir fonctionner sans javascript. le code doit tourner sur les principaux navigateurs et les principales plateformes (attention aux macs!) pour un intranet avec une politique logicielle stricte, les choses sont plus faciles : le navigateur est connu. privilégiez le code simple. Utilisez des bibliothèques! Liens utiles http://www.ecma-international.org/publications/standards/ecma-262.htm Spécifications d'ecmascript, version "standardisée" de javascript Webdeveloper : http://chrispederick.com/work/webdeveloper/ ; extension de firefox très pratique. www.quirksmode.org : site sur la compatibilité entre navigateurs. (en particulier http://www.quirksmode.org/dom/compatibility.html). http://www.w3schools.com/ documentations diverses. Un petit exemple pour commencer function calculerlasomme() { var n1= parseint(document.getelementbyid('nombre1ex1').value); var n2= parseint(document.getelementbyid('nombre2ex1').value); document.getelementbyid('resultatex1').value= n1+n2; <p>nombre 1 <input type="text" name="nombre1ex1" id="nombre1ex1"></p> <p>nombre 2 <input type="text" name="nombre2ex1" id="nombre2ex1"></p> <p>résultat <input type="text" name="resultatex1" id="resultatex1"></p> <button type="button" onclick="calculerlasomme()">calculer la somme</button> Page 1 sur 15

nombre 1 nombre 2 Résultat calculer la somme Le même avec une table... function calculerlasomme_1() { var n1= parseint(document.getelementbyid('nombre1ex1_bis').value); var n2= parseint(document.getelementbyid('nombre2ex1_bis').value); document.getelementbyid('resultatex1_bis').value= n1+n2; <table> <tbody><tr><td>nombre 1</td><td> <input type="text" name="nombre1ex1" id="nombre1e <tr><td>nombre 2</td><td> <input type="text" name="nombre2ex1" id="nombre2ex1_bis" <tr><td>résultat</td><td> <input type="text" name="resultatex1" id="resultatex1_bi </tbody></table> <button type="button" onclick="calculerlasomme_1()">calculer la somme</button> nombre 1 nombre 2 Résultat calculer la somme Javascript dans une page web Comment inclure du code dans une page? Plusieurs solutions : La balise script appels liés à des événements Les pseudo-liens javascript La balise script Le code javascript inclus dans la balise script est exécuté quand il est lu. Généralement, on l'utilise pour définir des fonctions. Deux possibilités : 1. code javascript écrit dans la page html: Page 2 sur 15

... code javascript (à réserver à du code court et non réutilisable) 2. inclusion de code, pour tout ce qui est réutilisable : <script type="text/javascript" src="monsource.js"> Appels javascript lié à des événements On peut demander qu'un bout de code javascript soit exécuté lors de certains événements: on a pressé un bouton donné (onclick) le pointeur de la souris est passé sur un élément (onmouseover) on a pressé une touche (onkeyup,...) la page a terminé de se charger (onload) Le code est alors écrit comme la valeur d'un attribut de l'élément concerné: clickez moi <button onclick="alert('click!')">clickez moi</button> On écrira du code très court. idéalement un appel de fonction. Constructions de base Le code JavaScript est une suite d'instructions, dont certaines peuvent être des déclarations de fonctions ou des affectations. Les instructions sont séparées par des passage à la ligne ou par le caractère ";" On suggère d'utiliser systématiquement ";", mais le passage à la ligne reste toujours un séparateur On peut écrire : euros= 6.56* francs; alert(euros); ou euros= 6.56* francs alert(euros) ou euros= 6.56* francs; alert(euros); Variables en javascript Les variables en javascript sont dynamiques et faiblement typées. Si une variable n'existe pas, lui donner une valeur la déclare automatiquement Page 3 sur 15

Une variable peut changer de type: montrer a a= 'salut'; a= 3; a= a + 2; a= a+7; <button onclick="alert('valeur de a '+ a)">montrer a</button> Il est conseillé de déclarer explicitement les variables à l'aide du mot-clef var : var a; Notez que ça ne fixe pas son type pour autant. Types de base nombres (un seul type pour les nombres réels et les entiers) booléens string Deux valeurs spéciales pour les objets : null et undefined. noter l'absence d'un type caractère! Quelques opérations sur les types de bases Les nombres on dispose entre autres des opérateurs +, -, *, /, % (modulo) note : pour la division euclidienne de x par y, on fera : q= Math.floor(x/y); (Math.floor() calcule la partie entière). Quand un calcul donne un résultat infini, on a une valeur spéciale : Infinity a= -1/0; alert (a==-infinity); // affiche "true" Quand un résultat n'est pas calculable (racine carrée de -1 ou 0/0), on obtient NaN ("Not a number"). Page 4 sur 15

NaN est le seul nombre... pas égal à lui même. Pour le tester, il faut utiliser isnan() : a= 0/0; alert (a==nan); // affiche false alert(isnan(a)); // affiche true Les booléens Opérateurs booléens usuels && (et),! (not), (ou). Les strings La déclaration de string peut se faire en utilisant des guillements simples '...' ou doubles "...". s1= "un texte"; s2='un autre texte'; L'opérateur "+" permet de concaténer deux string, voire une string et autre chose (un nombre par exemple). nom="turing"; salut="bonjour monsieur "; complet= salut + nom; // complet vaut "bonjour monsieur Turing" x= 3*4; reponse="la valeur calculée est "+ x + "!!!"; // reponse vaut "la valeur calculée est 12!!! Égalité Comparaisons Deux comparateurs disponibles : "==" qui sait faire des conversions, et "===" (trois signe égal) qui n'en fait pas. a === b si a et b ont le même type, et correspondent à la même valeur (pour les objets, s'ils ont la même adresse). a == b si, après conversion éventuelle, a et b ont la même valeur. Les règles de conversions sont complexes. si a ou b est un nombre, et que l'autre est une string, on converti la string en nombre, et on compare les Page 5 sur 15

valeurs ainsi, les comparaisons suivantes sont vraies : "01" == "01" (deux chaînes identiques) 1 == "01" (la chaîne "01" est convertie en nombre, et vaut 1) En revanche : "01"!= "1" (deux chaînes différentes) Ordre On a les opérateurs usuels <, <=, >, >= ils fonctionnent sur les nombres sur les strings: ordre lexicographique Règles complexes et peu intuitives : 1 + '0' -> '10' 1 * '0' -> 0 1+ true -> 2 Comparaisons Conversions automatiques Suggestion: se contenter de la concaténation; pour les autres : utiliser les conversions explicites s="15"; a= 2 * parseint(s); alert(a); // affiche 30 les chaînes sont des objets constantes déclarées entre "..." ou entre '...'. ont une propriété, length (leur longueur) se comparent avec "=="!!! de nombreuses méthodes: charat(pos) retourne une String charcodeat(pos) retourne le code unicode du caractère (si inférieur à 65535) Page 6 sur 15

split(separateur) : renvoie le tableau obtenu en découpant la chaîne. s= "un,deux,trois"; t= s.split(","); indexof(souschaine,index), indexof(souschaine): premier indice de la sous-chaîne, à partir de l'index donné, ou -1. s= "un,deux,trois"; i= s.indexof("tr"); // i vaut 8 substr(debut,longueur) : renvoie la sous-chaîne démarrant à "debut", de longueur "longueur". tolowercase() : renvoie la chaîne en minuscules ; touppercase() : renvoie la chaîne en majuscules. String.fromCharCode(c1,c2...) : permet de passer d'une suite de codes ascii à la chaîne correspondante. Chaînes et nombres Deux fonctions de javascript sont particulièrement intéressantes: parseint(chaine) : analyse chaîne comme un entier. Renvoie la valeur NaN (not a number) en cas d'échec. parsefloat(chaine) : analyse chaîne comme un entier. Renvoie la valeur NaN en cas d'échec. Notez que ces deux fonctions sont très permissives. Elles acceptent des chaînes qui commencent par un nombre, et, s'il y a du texte après, elle l'ignorent. Pour tester si elles ont réussi, on utilisera la fonction isnan(). s="1234"; i= parseint(s); if (isnan(i)) { alert(s + " n'est pas un nombre"); les tableaux (Array) doivent être créés, mais on n'a pas besoin de fixer leur taille: tab= new Array(); // Création du tableau tab[0]= 2; tab[1]= 3; s= 0; for (i= 0; i < tab.length; i++) { s= s + tab[i]; peuvent être initialisés à la création : tab= new Array("un", "deux", "trois"); longueur donnée par l'attribut length Page 7 sur 15

accès aux cases par la notation habituelle. passage d'un tableau à une chaîne de caractères par "join": l'argument de join est inséré entre les éléments. s= tab.join(""); // s vaut undeuxtrois s= tab.join(":"); // s vaut un:deux:trois On peut leur ajouter une case avec la commande push : tab= new Array("un", "deux", "trois"); tab.push("quatre"); // tab[3] vaut maintenant "quatre" inversement, pop() supprime le dernier élément du tableau, et le retourne: tab= new Array("un", "deux", "trois"); a= tab.pop(); // tab vaut ["un", "deux"] et a vaut "trois" Tableaux associatifs On a introduit ensuite la notion de tableau associatif. Ils associent une clef à une valeur. var t= {; t["java"]= "langage de programmation orienté objet"; t["lisp"]= "langage de programmation fonctionnel"; Autre méthode de création : var t= {"java": "langage de programmation orienté objet", "lisp": "langage de programmation fonctionnel"; Le mécanisme de javascript pour les tableaux associatifs est celui qui sert à implémenter les objets. Nous reviendrons sur les détails quand nous aborderons le concept. Supprimer un élément dans un tableau Pour supprimer un élément dans un tableau, on peut utiliser la méthode splice. t.splice(indice,nombre); Supprimer nombre éléments dans t à partir de l'indice indice. En option : t.splice(indice,nombre, e1, e2,...); remplace nombre éléments dans t à partir de l'indice indice par e1, e2... Structures de contrôle Page 8 sur 15

if if (CONDITION) { ACTIONS1; else { ACTIONS2; for Deux syntaxes possibles for (INIT; TEST; INCREMENT) { ACTIONS; exemple s= 0; for (var i= 0; i < tab.length; i++) { s= s+ tab[i]; for (suite) Pour parcourir les indices d'un tableau, on peut utiliser for (var... in...) function fortab() { var t= new Array("un", "deux", "trois"); for (var x in t) { alert( x + " : " + t[x]); démo affichera successivement "0 : un", "1: deux " et "2 : trois". for (fin) Fonctionne aussi pour les tableaux associatifs : while var t= {"java": "langage de programmation orienté objet", "lisp": "langage de programmation fonctionnel"; for (var nom in t) { alert("information sur le langage " + nom + " " + t[nom]); Page 9 sur 15

while (CONDITION) { ACTIONS; exemple var a=10; while(a>1){ alert(a); a--; //decremente a de 1 //attention si vous l'oubliez boucle infinie... do...while do { ACTIONS; while (CONDITION); exemple var a=10; do{ alert(a); a--; //decremente a de 1 //attention si vous l'oubliez boucle infinie... while(a>1); switch switch (VALEUR_A_TESTER) { case VAL1: ACTIONS; case VAL2: ACTIONS; default: ACTIONS; Contrairement au C et au Java, la valeur à tester peut être une chaîne de caractères: switch (reponse) { case "oui": alert("merci"); case "non": alert("au revoir"); Page 10 sur 15

les fonctions Bout de code réutilisable, avec un nom. Déclarées à l'aide du mot-clef function. Une fonction peut retourner une valeur, à l'aide du mot-clef return function somme(a,b) { return a+b; <button onclick="alert(somme(3,2))"> montrer somme (entiers) </button> <button onclick="alert(somme('bonjour ','monde'))"> montrer somme (chaînes)</button> montrer somme (entiers) montrer somme (chaînes) à noter: on n'explicite pas le type des arguments les fonctions sont uniquement identifiées par leur nom. On ne peut pas avoir deux fonctions qui s'appellent somme Variables globale Une variables déclarée en dehors d'une fonction est globale. montrer exemplevariable1 // marche aussi sans var... var exemplevariable1= 0; function augmenter1() { exemplevariable1= exemplevariable1 + 1; <button onclick="augmenter1(); alert(' la variable globale vaut '+ exemplevariable montrer exemplevariable1 </button> Dans cet exemple, la variable exemplevariable1 modifiée par la fonction est la même que la variable globale. Variables locale Une variable est locale si elle est déclarée dans une fonction. On utilise var. montrer exemplevariable2 Page 11 sur 15

var exemplevariable2= 0; function augmenter2() { var exemplevariable2=55; // variable locale. exemplevariable2= exemplevariable2 + 1; alert("dans la fonction : "+exemplevariable2); <button onclick="augmenter2(); alert('la var. globale vaut '+exemplevariable2);"> montrer exemplevariable2 </button> Notez que var est optionnelle (quoique très fortement conseillée) pour les déclarations de variables globales, mais obligatoire pour les variables locales. Une variable utilisée dans une fonction, mais pas déclarée, est considérée comme globale. Les paramètres des fonctions sont automatiquement considérés comme des variables locales Attention, la notion de localité est différente de celle de java : localité par rapport aux fonctions et non par rapport aux blocs Manipulation de la page Web But: pouvoir lire et modifier des éléments de la page web par programme. Pour changer leur aspect Pour lire et écrire des éléments de formulaire On passe par le DOM «Document objets model». Première approche du DOM On dispose d'un objet nommé document, qui représente la page web. Pour manipuler un élément, on lui donne un identifiant. On peut alors récupérer l'élément à l'aide de la méthode getelementbyid Un texte peindre <p id="dom1">un texte</p> <button onclick="document.getelementbyid('dom1').style.color='red';">peindre</button> Propriétés des éléments Un élément retourné par getelementbyid a plusieurs propriétés, que l'on peut lire et/ou écrire. style : permet l'accès à toutes les caractéristiques graphiques CSS de l'élément. Page 12 sur 15

value : valeur d'un champ de formulaire. En lecture et en écriture. innerhtml : propriété qui permet de modifier le contenu de l'élément. Ne fonctionne pas pour tous les éléments. id : l'id de l'élément classname : classe de l'élément (pour les CSS) Nous allons les détailler. DOM et CSS (Cascading Style Sheets) Les attributs de style CSS d'un élément du DOM permettent de changer son aspect. Ils sont accessibles par la propriété "style" des éléments. Les caractéristiques de cet élément sont contrôlées par les CSS. color black Changer Css <div id="controleparcss" style="border-style:solid"> Les caractéristiques de cet élément sont contrôlées par les CSS. </div> <p> </p> <select name="cssname" id="cssname"> <option value="color">color</option> <option value="background">background</option> <option value="fontsize">fontsize</option> <option value="display">display</option> <option value="position">position</option> <option value="left">left</option> <option value="right">right</option> <option value="top">top</option> <option value="bottom">bottom</option> <option value="width">width</option> <option value="float">float</option> <option value="clear">clear</option> </select> <input id="cssvalue" name="cssvalue" value="black"> <button type="button" onclick="setcss()">changer Css</button> function setcss() { var elt= document.getelementbyid('controleparcss'); var cssvalue= document.getelementbyid('cssvalue').value; var cssname= document.getelementbyid('cssname').value; switch (cssname) { case 'background': elt.style.background= cssvalue; case 'color': Page 13 sur 15

elt.style.color= cssvalue; case 'fontsize': elt.style.fontsize= cssvalue; case 'display': // none : caché ; inline : dans le cours du texte; // block : comme un bloc. elt.style.display= cssvalue; case 'position': // static, absolute, relative ou fixed // static : le défaut. // ne prend pas en compte left, right, top ou bottom. // absolute : position donnée par rapport au conteneur // relative : relatif à l'élément précédent // fixed : relatif à la fenêtre du navigateur. (pas sur IE). elt.style.position= cssvalue; case 'left': elt.style.left= cssvalue; case 'right': elt.style.right= cssvalue; case 'top': elt.style.top= cssvalue; case 'bottom': elt.style.bottom= cssvalue; case 'width': elt.style.width= cssvalue; case 'float': // élément flottant : left, right, none elt.style.cssfloat= cssvalue; case 'clear': // refuse des flottants sur les côtés // left, right, both, none elt.style.clear= cssvalue; DOM et CSS (suite) On utilise en particulier la propriété "display", et sa valeur "none", pour faire apparaître et disparaître des éléments. cacher Vous le voyez? <button onclick="document.getelementbyid('coucou').style.display='none';">cacher</button> <div style="border: 2px solid red" id="coucou"> Page 14 sur 15

Vous le voyez? </div> Exercice: écrire une fonction qui bascule l'élément entre l'état "caché" et l'état visible, et vice-versa. Manipulation des images On peut changer ce qu'une image affiche en modifiant sa propriété "src": <img id="img1" src="coursjavascriptdata/ledlightblue.png" onmouseover="document.getelementbyid('img1').src='coursjavascriptdata/ledgreen.png' onmouseout="document.getelementbyid('img1').src='coursjavascriptdata/ledlightblue.p alt="une bille" /> Page 15 sur 15