WebDesign Javascript - Dipartimento Politecnico di Ingegneria e

Transcript

WebDesign Javascript - Dipartimento Politecnico di Ingegneria e
Introduzione alla
programmazione lato
client con Javascript
Luca Di Gaspero
Dipartimento di Ingegneria Elettrica, Gestionale e Meccanica
Università degli Studi di Udine
Docente
•
•
Dipartimento di Ingegneria Elettrica, Gestionale e
Meccanica
Università di Udine, sede dei Rizzi
•
•
•
E-mail: [email protected]
URL: http://www.diegm.uniud.it/digaspero/
Tel: 0432-558242
Ricevimento studenti
•
Pordenone/Udine, su appuntamento
Contenuti delle lezioni
• Introduzione al linguaggio Javascript
• Il modello ad oggetti dei documenti XML/
(X)HTML
• Manipolazione dei documenti attraverso il
linguaggio Javascript
Javascript
• Non è Java!
• Sviluppato da Netscape, è un linguaggio di
scripting per client (browser) web
• E’ un linguaggio interpretato da un
apposito modulo del browser (non tutti i
browser lo supportano completamente, ad
es. IE per windows mobile)
Javascript (cont.)
• Nel corso del tempo è diventato uno
standard pubblicato dalla European
Computer Manifacturers Association
(ECMA)
• ECMAScript ECMA-262 / ISO-16262
• Tre livelli: ECMA v1 v2 v3
Versioni di Javascript
• Netscape/Mozilla/Safari implementano
Javascript 1.5 (compliant allo standard
ECMA v3)
• Microsoft implementa JScript 1.5 (anch’esso
dichiarato compliant al medesimo standard)
A cosa serve Javascript
• I linguaggi di markup (X(HT)ML) sono di
natura “dichiarativa”
• definiscono quale dev’essere la struttura
del documento o la sua formattazione
• Non hanno la possibilità di gestire delle
scelte/prendere decisioni/iterare delle
operazioni
A cosa serve Javascript
(cont.)
• Per aggiungere una componente
procedurale alle pagine e consentirne la
manipolazione è necessario un linguaggio di
programmazione
• In particolare i linguaggi di script sono
linguaggi di programmazione con sintassi
semplificata e dedicati ad uno specifico
ambiente di esecuzione
A cosa serve Javascript
(cont.)
• I linguaggi di script per il web combinano lo
scripting con il linguaggio (X)HTML per
ottenere delle pagine interattive
• In particolare Javascript consente di
manipolare le pagine sul lato client
• Non è l’unica possibilità
(Programmazione Web Lato Server)
Gli script lato client
• Gli script consistono in una sequenza di
istruzioni che il browser deve eseguire (sono
dunque interpretati)
• Le istruzioni non costituiscono un
programma vero e proprio
• piuttosto sono dei frammenti di
programma messi nei posti giusti
• ad esempio in risposta ad eventi
Possibili utilizzi degli
script lato client
• Validazione dei dati dei moduli HTML
durante la compilazione
• Visualizzazione di messaggi e input di dati
da finestre (alert box)
• Animazione del contenuto della pagina e
interazione con l’utente
• Adattamento della pagina al browser
• Interazione asincrona con il server (AJAX)
Dove vanno gli script
• Nel codice (X)HTML, racchiusi da un
apposito tag <script>
• In file esterni al documento (X)HTML
(solitamente con estensione js)
Il tag <script>: attributi
• type: specifica il tipo di contenuto (mime
type) del tag text/javascript
• src: specifica l’URL di un file contenente il
codice javascript
• defer: specifica al browser di interpretarne il
contenuto solo una volta che l’intero
documento è stato caricato
• Importante: la chiusura </script> è sempre
obbligatoria
Un esempio di script
<script type=”text/javascript>
<!-document.write(“Ciao mondo!”);
//-->
</script>
Il tag <noscript>
• Per compatibilità verso i browser che non
supportano Javascript è possibile specificare
un contenuto alternativo utilizzando il tag
<noscript>
Dove inserire il codice
Javascript
• Può essere utilizzato in qualunque punto di
un documento (X)HTML
• Nel caso si trovi nell’<head> viene
eseguito prima di visualizzare la pagina
• Nel caso sia nel <body> viene eseguito
nel momento in cui viene incontrato nel
flusso di rendering della pagina
Alcuni esempi
• Vedi codice
Interazione di base con
l’utente
•
•
•
window.alert(msg)
•
visualizza un messaggio con un pulsante di ok
per chiuderlo dopo la lettura
window.confirm(msg)
•
visualizza un messaggio con una coppia di
pulsanti ok/annulla
window.prompt(msg)
•
visualizza un messaggio con un campo di testo
Elementi del linguaggio
• variabili (non tipate) e valori (stringhe con
apici e doppi apici)
• espressioni e operatori
• strutture di controllo
• funzioni (non tipate)
• oggetti e array
Variabili e strutture di
controllo
•
Per dichiararle si usa var, altrimenti sono
variabili globali (con visibilità l’intero
documento)
•
Possono assumere valori di tipi diversi
•
•
es: var i = 2 + 3; i = ‘pippo’;
Le strutture di controllo sono le classiche della
programmazione strutturata if-else, switch,
while, do-while, for (più break e continue)
Esercizi
• Creare una pagina che chieda all’utente
l’autorizzazione a proseguire e scriva due
messaggi diversi nel caso l’autorizzazione
sia concessa o meno.
• Creare una pagina che chieda un numero e
visualizzi nel proprio contenuto tutti i valori
compresi fra 1 e il numero immesso.
Funzioni
•
Sintassi, definizione:
function nome_funzione(parametro1, parametro2)
{
istruzioni;
// opzionalmente return valore;
}
•
Sintassi, invocazione:
nome_funzione(valore_par1, valore_par2);
Oggetti
• In Javascript non esistono le classi, ma gli
oggetti vengono definiti attraverso un
costruttore e definendo le proprietà
function Persona(nome, genere) {
this.nome = nome;
this.genere = genere;
}
Oggetti: creazione
• La creazione di un oggetto avviene con new
var d = new Date(); // d è la data di oggi
document.write(d.toString());
Array
• Sono degli oggetti, creati con Array()
• var a = new Array(); a = new Array(el0,
el1, ...); a = new Array(lunghezza);
• Lunghezza: a.length;
• Accesso: a[0] = 3; a[5] = 10;
Esercizi
• Riempire un array con i nomi di una serie
di utenti e stamparli nel corpo del
documento (X)HTML
• Creare una pagina che, dato l’array
precedente, chiede all’utente il proprio
nome e verifica se il suo nome è presente
nell’array. In caso affermativo si scriverà un
messaggio di benvenuto, altrimenti un
messaggio di accesso negato.
Esercizi
• Modificare l’esercizio precedente definendo
una funzione che controlla la presenza o
l’assenza dell’utente nell’array.
Eventi
•
Ai tag (X)HTML è possibile associare degli eventi
legati alla gestione della pagina da parte del
browser
•
onLoad (termine del caricamento della pagina
o di un’immagine)
•
onMouseOver, onMouseOut, onClick,
onDblClick
•
onSubmit (per i form)
Eventi: esempi
• Vedi codice
Esercizi
•
Data la seguente lista, modificarla facendo sì che al
passaggio su uno di questi numeri si aggiunta al
documento un messaggio ripetuto tante volte
quante il valore del numero corrispondente.
<ul>
<li>1</li>
<li>2</li>
<li>2</li>
</ul>
•
(Suggerimento, scrivere una funzione per la scrittura del
messaggio che prende come parametro il numero di volte in cui
va ripetuto).
Il Document Object
Model (W3C)
• Rappresentazione ad oggetti dei documenti
X(HT)ML
• fornisce un chiaro modello concettuale
del documento
• agevola la manipolazione di documenti
attraverso un linguaggio di
programmazione ad oggetti
Rappresentazione ad
albero
<html>
<head>
<title>Esempio DOM</title>
</head>
<body>
<h1>Questo è un esempio di documento</h1>
<p>Con un <em>solo</em> paragrafo</p>
<!-- e un commento -->
</body>
</html>
L’albero del documento
Document
Element
Text
Comment
document
html
head
title
Esempio
DOM
body
h1
Questo è un
esempio
di documento
p
Con un
em
solo
<!-- e un
commento -->
paragrafo
L’albero del documento
(cont.)
• Ogni elemento dell’albero è chiamato
genericamente un oggetto Node
• L’interfaccia di Node mette a disposizione
degli strumenti per navigare l’albero (ad es.
parentNode, childNodes[], firstChild, lastChild,
firstSibling, nextSibling) e per modificare il
valore dei nodi
• Ogni nodo ha una sua sotto-interfaccia propria
del suo tipo (proprietà Type)
Tipi di nodi
Interfaccia
Costante
Element
Node.ELEMENT_NODE
Text
Node.TEXT_NODE
Document
Node.DOCUMENT_NODE
Comment
Node.COMMENT_NODE
Attr
Node.ATTRIBUTE_NODE
DocumentType
Node.DOCUMENT_TYPE_NODE
Accedere ai nodi
• In principio si può navigare il documento
direttamente dall’oggetto document (di tipo
Document, che rappresenta l’intero
documento)
• Il modo più semplice è utilizzare gli id per
denominare gli elementi che ci interessano e
usare document.getElementById(id)
Accedere ai nodi (cont.)
•
Altri metodi di accesso a collezioni di nodi sono
i seguenti:
•
getElementsByName(name) che restituisce
gli elementi il cui attributo name corrisponde
•
getElementsByTagName(tag) che restituisce
tutti gli elementi il cui tag è quello
specificato
•
Può essere utilizzato su qualunque nodo,
non necessariamente su document
Creazione di nodi
• Sono metodi dell’oggetto document
• nodo = document.createElement(‘p’); p
• testo = document.createTextNode(‘testo’);testo
• nodo.appendChild(testo);
• Attenzione: non aggiungono
automaticamente l’elemento alla pagina,
ma lo creano come sottoalbero isolato
Aggiunta/rimozione di
nodi
•
nodo.appendChild(nuovoNodo) aggiunge
nuovoNodo alla fine della lista dei figli di nodo
•
nodo.insertBefore(nuovoNodo, vecchioNodo)
inserisce nuovoNodo prima di vecchioNodo
nella lista dei figli di nodo
•
nodo.removeChild(vecchioNodo) rimuove
vecchioNodo dalla lista dei figli di nodo
•
nodo.replaceChild(nuovoNodo, vecchioNodo)
rimpiazza vecchioNodo con nuovoNodo
Aggiunta/modifica di
attributi di un nodo
• element.setAttribute(nome_attributo, valore) e
element.removeAttribute(nome_attributo)
• tabella.setAttribute(‘border’, ‘1’);
Esempi
• Vedi codice
Esercizi
• Creare una pagina che chiede all’utente una
URL (attraverso un form contenente un
campo di testo e un pulsante di conferma) e
lo aggiunge sottoforma di link (tag <a>) in
un’area prestabilita della pagina. Attenzione
agli attributi (<a>, contiene l’URL di
destinazione nell’attributo href)
Esercizi
• Dato l’esempio che cambia l’immagine:
modificarlo, facendo in modo che una volta
che il mouse è stato spostato si visualizzi
nuovamente l’immagine precedente.
Javascript e CSS
• Attraverso l’attributo style dei nodi elemento
è possibile modificare le informazioni di
stile
var tab = document.getElementById(‘tabella’);
tab.style.color = ‘green’;
• L’eventuale classe CSS è accessibile
attraverso className
tab.className = ‘tabella-rossa’;
Javascript e CSS (cont.)
• I nomi CSS vengono tradotti nella forma “a
gobba di cammello” tipica di Java(script)
• font-size → fontSize (tab.style.fontSize =
‘12pt’)
• border-top-color → borderTopColor
(tab.style.borderTopColor = ‘red’)
• i nomi singoli (ad es., overflow) non
cambiano eccetto float → cssFloat
Esercizi
• Scrivere una pagina contenente una tabella,
che evidenzi la riga sulla quale si trova
correntemente il mouse utilizzando
Javascript
• Suggerimento: si utilizzi una classe CSS
apposita per le righe evidenziate