• Aucun résultat trouvé

16 be2009 É ieS Bi Uiveiédei eShia Ai

N/A
N/A
Protected

Academic year: 2022

Partager "16 be2009 É ieS Bi Uiveiédei eShia Ai"

Copied!
58
0
0

Texte intégral

(1)

Liene 3informatique

Sébastien Verel

vereli3s.unie.fr

www.i3s.unie.fr/

verel

ÉquipeSoBi-UniversitédeNieSophia-Antipolis

16 otobre 2009

(2)

Objetifs de la séane 6

1

Connaitrele prinipe duDOM

2

Savoirnaviguer dansleDOM

3

SavoirmodierleDOM

4

Savoirmodierunstyled'un élémentduDOM

5

Savoirélaborerun menuavejavasript

6

Savoirdéplaer des élémentsavejavasript

7

Savoirutiliser lesformulairesavejavasript

8

Savoirvérierunformulaire

Question prinipaledujour :

Quels sontlespossibilitésde javasript en manipulation de

douemnt?

(3)

Plan

1

Rappels etompléments

2

DOM

3

Javasript etCSS

4

Formulaires

(4)

Possibilité de javasript

Validerdeshampsde formulaires

Enregistrement etleture de ookies

Modiationdynamique del'aspetde ertains élémentde la

page

Ahage et masquagedeséléments

Déplaements desélémentsde lapage

Capture de ertains événementset modiation de lapage en

onséquene

Délement de ontenu

Roled'intefae aveune appliationté serveursansquitter

lapage

Le afé

(5)

Bases du langage

types :

lassique:

entier,réel,et.

pasdedélarationexpliite

utiliserlesommentairespourplussureté

(6)

Les tableaux

Unesuited'élémentsséparés pardesvirgulesest untableau

déni en extension:

"trois" , "deux" , "un" , "boom"

tableauxassoiatifs:

"fr" : "trois, deux, un, boom" ,

"en" : "three, two, one, boom" ,

"de" : "drei, zwei, eins, boom"

(7)

Bases du langage

fontions :

motléfuntion

engénéral dansl'élémenthead

paramètres,arguments:

nontypé

valeurnale:

return

paramètres:

pasdeobligationdepréseneàl'appel

(8)

Nombre de paramètres variables

Utilisation d'un tableau:

funtion affihe(str) {

for(var i = 0; i < str.length; i++)

alert(str[i℄);

}

affihe("trois", "deux", "un", "boom");

(9)

Bases du langage

objets :

pasdemotlédistintif:

sedénitsousformedefontion

instantiationàl'aidede new

existened'unobjet:

testsurl'objet

listedespropriétés:

utilisationdein

délarationdesméthodesetpropriétésdelasse: this

(10)

Exemple de lasse

funtion LaClasse {

this.opyright = "() S. Verel 2008" ;

this.Count = ount ;

var deompte = {

"fr" : "trois, deux, un, boom" ,

"en" : "three, two, one, boom" ,

"de" : "drei, zwei, eins, boom"

}

funtion ount(lang) {

if (deompte[lang℄)

windows.alert(deompte[lang℄);

}

}

(11)

Bases du langage

struture de ontle:

testbinaire:

if (window.XMLhttpRequest)

alert("youpi");

else

alert("tant pis");

bouleànombred'itérationdéni:

for(var i = 0; i < n; i++)

paroursdespropriétés:

for prop in window { ... }

bouleànombred'itérationindéni:

(12)

Inlusion de javasript

3 méthodes:

dansl'élément sript:

<sript type="text/javasript">

...

</sript>

ode externe:

<sript type="text/javasript" sr="devine.js">

</sript>

lorsd'un événement:

<body onload="affihe()">

...

</body>

(13)

Objets javasript : String

liste despropriétés et méthodes:

length

harAt(i)

ontat(" ")

replae(str1, str2)

substring

toLowerCase

split(sep)

searh(str),indexOf(str), lastIndexOf(str)

(14)

Objets javasript : Math

liste despropriétés et méthodes:

desonstantes

random()

abs(x)

fontions tigonométriques

log(x),exp(x)

sqrt(x)

pos(x,y)

min(x,y) ,max(x,y)

round, oor,eil

(15)

Objets javasript : Date

réation datedu jour:

new Date()

réation datedénie:

new Date("Ot 16,2008 10 :56:00")

new Date(2008, 10,16,10,56,00)

obtenir unepropriété :

get...

dénir unepropriété :

set...

(16)

Objets javasript : Image

instaniationlassique

img = new Image();

propriété de lasoure

img.sr = "ootier.jpg"

tester lehargement

if (img.omplete)

alert("'est hargé");

(17)

Objets javasript : history

bak()

forward()

go(n)

(18)

Objets javasript : loation

host:l'hte, le domaine,et leportutilisésdansl'url

href :urlomplète

hostname: nomde l'hote

pathname :hemin quisuitle nom dedomaine

reload()

(19)

Objets javasript : window

window.loation

window.history

redimensionnement :

resizeTo(x, y)

resizeBy(dx, dy)

repositionnement:

moveTo(x,y)

moveBy(dx, dy)

open("url", "nom","options")

(20)

Objets javasript : navigator

appName :nom dunavigateur

appCodeName:nom de ode dunavigateur

appVersion :version

plateform:systèmed'exploitation

(21)

Retour TP 05

javasript unlangage permissif

ilfaut êtreenore plusvigilant

ne pas oublier lesbonnes méthodesde programmation

(22)

Doument Objet Model

D.O.M. :Doument ObjetModel

modèleobjetde doument

modèleobjetpourmanipuler undoumentHTML

une API:appliationprogramming intefae

approhe desmodèles objetsduW3C :propriétés,méthodes,

desription

(23)

Doument Objet Model

Desription:

modèlebjetalquer surlahierarhie arboresente deséléments

de lapage

balise de lapage :noeud

noeuds parents, enfantsselonlaontenane

moreaude texte:noeud propre

Méthodes:

navigation dansl'arbre

(24)

Objetifs

interfae de programmation standartquelque soitOS

uniformiserlamanipulation desdouments web parsripts

ECMAsript :standardisation javasript

informationssur http://w3.org/DOM

(25)

Aés élément spéique

doument.getElementById("nom")

aessible seulement lorsquetout le doument aété hargé

funtion elementID(name) {

window.alert(doument.getElementById(name));

}

<boby>

<p id="para"> ... </p>

<sript type="text/javasript">

elementID("para");

(26)

Aés aux balises

doument.getElementByTagName("nomBalise")

retourne le tableauontenant toutesles balisesdésignées

aessible seulement lorsquetout le doument aété hargé

funtion elementParagraphe(name) {

window.alert(

doument.getElementByTagName("p") +

" ( " +

doument.getElementByTagName("p").length +

" éléments ) "

);

}

(27)

Navigation dans l'arboresene

Propriétés :

rstChild :premier noeud enfant

lastChild:dernier noeud enfant

hildNodes:tableau de touslesnoeuds enfants

parentNode :noeudparent

nextSibling :noeudsuivantde même niveau

previousSibling :noeudpréédentde même niveau

(28)

Information de noeud

Propriétés :

nodeName:nom de labalise dunoeud(

text sitexte)

nodeValue :seulement pourles noeudstexte

renvoiele texte

nodeType:type dunoeud

1: balise

2: attribut

3: texte

8: ommentaireXHTML

9: doument

10:DTD

11:fragment

(29)

Suppression d'élément

removeChild()

à partir dunoeudparent

suppressiondu lsdésignéen paramètre

funtion removeItem() {

var list = doument.getElementById("list");

if (list.hildNodes.length > 0)

list.removeChild(list.lastChild);

}

(30)

Ajout d'éléments

appendChild

à partir dunoeudparents

ajout l'enfant désignéà lasuitedesautresenfants

funtion addItem() {

var list = doument.getElementById("list");

var newNode = doument.reateElement("li");

list.appendChild(newNode);

}

reateElement(name) :réerunélementde typename

(31)

Ajout d'éléments

insertBefore

à partir dunoeudparents

ajout un noeud enfant

avant le noeuden seond paramètres

funtion addItem() {

var list = doument.getElementById("list");

var newNode = doument.reateElement("li");

list.insertBefore(newNode, list.firstChild);

}

(32)

Création élément de texte

reateTextNode

rée unnoeud lsde texte

var nr = 1;

funtion addItem() {

var list = doument.getElementById("list");

var newNode = doument.reateElement("li");

nr++;

var newTextNode = doument.reateTextNode("Item " + nr);

newNode.appendChild(newTextNode);

list.appendChild(newNode);

}

(33)

Manipulation d'attributs

setAttribute

2 arguments:le nom de l'attributetsa valeur

var nr = 1;

funtion addItem() {

var list = doument.getElementById("list");

var newNode = doument.reateElement("li");

nr++;

var newTextNode = doument.reateTextNode("Item " + nr);

var newLink = doument.reateElement("a");

newLink.setAttribute("href", "http://www.i3s.unie.fr/~verel");

(34)

Clonage d'élément

loneElement

true :opieen profondeur aveenfant

false :opiedunoeud seulement

funtion addItem(mode) {

var list = doument.getElementById("list");

var newItem = list.firstChild.loneNode(mode);

list.appendChild(newItem);

}

(35)

Remplaement d'élément

replaeChild

depuis le noeudparent

2 arguments:substitue le noeud en seond argument par lenoeud

en premier argument

var nr = 1;

funtion addItem() {

var list = doument.getElementById("list");

var newNode = doument.reateElement("li");

nr++;

var newTextNode = doument.reateTextNode("Item " + nr);

(36)

Modiation de fragment

innerHtml

Modie leode interne HTMLde n'importequelélément.

Non standardisé,nonspéié dansDOM, maismarhe quand

même.

var nr = 1;

funtion addItem() {

var list = doument.getElementById("list");

nr++;

var newTextNode = "<li>Item " + nr + " </li>";

newNode.appendChild(newTextNode);

list.innerHTML += newNode;

(37)

Positionnement des éléments

Avetout saufIE :

.style.left ="0px"

.style.top ="0px"

AveIE:

.style.posLeft =0

.style.posTop =0

funtion position(nom) {

var el = doument.getElementById(nom);

el.style.left = "0px";

el.style.posLeft = 0;

el.style.top = "0px";

(38)

Navigation toujours apparente

Avetout saufIE :

window.pageXoset etwindow.pageYoset

AveIE:

window.body.srollLeft etwindow.body.srollTop

funtion positionNavigation() {

var nav = doument.getElementById("navigation");

var x, y;

var navwidth = 155;

if (windiw.innerWidth) {

x = window.innerWidth + window.pageXoffset - navwidth;

y = window.pageYoffset + 10;

} else {

with (doument.body) {

x = lientWidth + srollLeft - navwidth;

y = srollTop + 10;

}

}

nav.style.left = x + "px";

nav.style.posLeft = x;

nav.style.top = y + "px";

SébastienVerel ProgrammationWeb

(39)

Navigation toujours apparente

funtion positionNavigation() {

var nav = doument.getElementById("navigation");

var x, y;

var navwidth = 155;

if (window.innerWidth) {

x = window.innerWidth + window.pageXoffset - navwidth;

y = window.pageYoffset + 10;

} else {

with (doument.body) {

x = lientWidth + srollLeft - navwidth;

y = srollTop + 10;

}

}

nav.style.left = x + "px";

(40)

Aés aux styles CSS

aèsparpropriété styleommunà toutobjet

tiret

impossible:remplaerpar majusule("à lajava")

funtion makeBold() {

doument.getElementById("para").style.fontWeight = "bold" ;

window.setTimeOut("makeLighter();", 1000);

}

funtion makeLighter() {

doument.getElementById("para").style.fontWeight = "lighter" ;

window.setTimeOut("makeBold();", 1000);

}

window.onload = makeBold ;

(41)

Aés aux lasses

lassName

funtion makeBold() {

doument.getElementById("para").style.lassName = "strong" ;

window.setTimeOut("makeLighter();", 1000);

}

funtion makeLighter() {

doument.getElementById("para").style.lassName = "weak" ;

window.setTimeOut("makeBold();", 1000);

}

(42)

Aés aux feuilles de style individuelles

styleSheets :tableauxquiontienttoutesles feuilles

disable:true ou falsepourativer ou nonlafeuille

possibilitéd'ativerlafeuillevoulue

funtion makeBold() {

doument.styleSheets[0℄.disable = false;

doument.styleSheets[1℄.disable = true;

window.setTimeOut("makeLighter();", 1000);

}

funtion makeLighter() {

doument.styleSheets[0℄.disable = true;

doument.styleSheets[1℄.disable = false;

window.setTimeOut("makeBold();", 1000);

}

(43)

Aés aux regles de CSS

aveIE :

propriété rules

autreque IE:

propriété ssRules

funtion hangeColor(i) {

if (doument.styleSheets[i℄.rules) {

doument.styleSheets[i℄.rules[0℄.style.olor = randomColor() ;

doument.styleSheets[i℄.rules[1℄.style.olor = randomColor() ;

} else if (doument.styleSheets[i℄.ssRules) {

doument.styleSheets[i℄.ssRules[0℄.style.olor = randomColor() ;

doument.styleSheets[i℄.ssRules[1℄.style.olor = randomColor() ;

}

(44)

Disparition de ontenu

Changements réalisésaveCSS lorsqueparexemple :

Erand'attente quidisparait

Un seulongletahéà lafois

Plusieurs possibilités:

utiliserle DOM:hangement de l'arbre

CCS, propriété visibility

CSS, propriétédisplay

(45)

Disparition de ontenu : visibility

funtion showHide(show, hide) {

doument.getElmentById(show).style.visibility = "visible" ;

doument.getElmentById(hide).style.visibility = "hidden" ;

}

Mais positionnementabsolu :diéreneentre navigateur

(46)

Disparition de ontenu : display

funtion showHide(show, hide) {

doument.getElmentById(show).style.display = "blok" ;

doument.getElmentById(hide).style.display = "none" ;

}

(47)

Modiation du pointeur de souris

ursor

propriétéde urseur

window.onload = funtion() {

doument.getElmentById("helpButton").style.ursor = "help";

}

auto, rosshair,default, e-resize,help, move, n-resize, ne-resize,

nw-resize, pointer,s-resize, se-resize,sw-resize,test, w-resize,wait.

(48)

Objetifs

Communiation aveleserveur:

donnéessaisiespuisenvoyé auserveur

Validationdesdonnées

autres opérationspossibles

(49)

Formulaire ave javasript

utilisation de doument.forms

tableau de tousles formulaires

parl'indie,ou par le"name" duformulaire

utilisation de doument.forms[℄.elements

tableau de tousles élémentsduformulaire

parl'indie,ou par le"name" de l'élément

<form name="mainForm">

...

</form>

...

doument.forms["mainForm"℄

doument.forms[0℄

douemnt.forms[0℄.elements["element1"℄

(50)

Aès aux hamps de texte

.elements[name℄.value

propriétévaluedonne aésau hampstexteen leture ou ériture

funtion showText(f) {

window.alert(f.elements["textField"℄.value);

}

...

<form>

<input type="text" name="textField"/>

<textarea> bla bla </textaera>

<input type="password" />

<input type="button" value="show text"

(51)

Aés aux ases à oher

heked

retourne true silaase est ohée

funtion showStatus(f) {

window.alert("the hakbox is " +

(f.elements["hkBox"℄.heked? "heked." : "not heked.")

);

}

...

<form>

<input type="hekbox" name="hkBox"/>

<input type="button" value="show status"

(52)

Aés à des boutons radio

value etheked

désignation dugroupe :tableauxdesboutons

aés àlavaleuret àsa validation

funtion showStatus(f) {

var s = "";

for(var i = 0; i < f.elements["radioButton"℄.length; i++) {

var btn = f.elements["radioButton"℄[i℄;

s += btn.value + " : " + btn.heked + "\n";

}

window.alert(s);

}

(53)

Aés à des listes de séletion

seletIndex

-1 :si auune séletionindiede l'élément séletionné

options

tableau deséléments de laliste

propriétéseleted :truesi séletionné

funtion showStatus(f) {

var index = f.elements["seletList"℄.seletIndex;

if (index == -1)

window.alert("quedal");

else {

var element = f.elements["seleList"℄.options[index℄;

(54)

Aés à une liste à hoix multiple

seletIndex

-1 :si auune séletionindie:premier élémentséletion(inutile)

options

tableau deséléments de laliste

propriétéseleted :truesi séletionné

(55)

Aés à une liste à hoix multiple

funtion showStatus(f) {

var index = f.elements["seletListM"℄.seletIndex;

if (index == -1)

window.alert("quedal");

else {

var list = f.elements["seleListM"℄;

for(var i = 0; i < list.options.length; i++) {

var option = list.options[i℄;

window.alert("Element #" + i + " (aption: " +

option.text + ", value: " + option.value + ") " +

(option.seleted ? "seleted." : "not seleted.") + "\n" );

}

}

(56)

Compléments

Désativation deséléments de formulaire

envoie d'un formulaire

empêher l'envoi

f.elements["password"℄.disabled = true;

doument.forms[0℄.submit();

<a href="javasript:doument.forms[0℄.submit();"> submit form</a>

<form onsubmit="return false;">

<form onsubmit="return hekform(this);">

(57)

Compléments

Donner le fousà unhamp

Séletionde textedans unhamp

f.elements["password"℄.fous();

field.setSeletRange(0, field.value.length);

var range : field.reatTextRange();

range.moveStart("harater", .0);

range.moveEnd("harater", field.value.length - 1);

range.selet();

(58)

Objetifs de la séane 6

1

Connaitrele prinipe duDOM

2

Savoirnaviguer dansleDOM

3

SavoirmodierleDOM

4

Savoirmodierunstyled'un élémentduDOM

5

Savoirélaborerun menuavejavasript

6

Savoirdéplaer des élémentsavejavasript

7

Savoirutiliser lesformulairesavejavasript

8

Savoirvérierunformulaire

Question prinipaledujour :

Quels sontlespossibilitésde javasript en manipulation de

douemnt?

Références

Documents relatifs

left : déale vers la droite si positif, vers la gauhe sinon. right : déale vers la gauhe si positif, vers la

Connaitre la synthaxe d'un requete HTTP et sa réponse2. Connaitre les ommandes d'une

Attention toutefois quelques trus datent3. Et bien sur, les reommandations

Savoir traiter simplement la réponse texte d'une requète5. Savoir traiter la réponse à l'aide de XML et

Connaître les mots lefs d'un langage impératif simple.. Connaître les opérations de bases

−→ utiliser un shéma itératif à nombre d'itérations déterminé. −→ appeler aussi souvent

ne retourner auune valeur : on notera le type de retour rien. Algorithme deviner(n : entier)

Utilisation d'un aumulateur pour réaliser un alul dans