Introduzione alla programmazione lato client con Javascript - Luca Di Gaspero Dipartimento di Ingegneria Elettrica, Gestionale e Meccanica
←
→
Trascrizione del contenuto della pagina
Se il tuo browser non visualizza correttamente la pagina, ti preghiamo di leggere il contenuto della pagina quaggiù
Introduzione alla
programmazione lato
client con Javascript
Luca Di Gaspero
Dipartimento di Ingegneria Elettrica, Gestionale e Meccanica
Università degli Studi di UdineDocente
• Dipartimento di Ingegneria Elettrica, Gestionale e
Meccanica
Università di Udine, sede dei Rizzi
• E-mail: l.digaspero@uniud.it
• URL: http://www.diegm.uniud.it/digaspero/
• Tel: 0432-558242
• Ricevimento studenti
• Pordenone/Udine, su appuntamentoContenuti 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
operazioniA 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 esecuzioneA 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 eventiPossibili 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 • In file esterni al documento (X)HTML (solitamente con estensione js)
Il tag : 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 è sempre obbligatoria
Un esempio di script
Il tag • Per compatibilità verso i browser che non supportano Javascript è possibile specificare un contenuto alternativo utilizzando il tag
Dove inserire il codice
Javascript
• Può essere utilizzato in qualunque punto di
un documento (X)HTML
• Nel caso si trovi nell’ viene
eseguito prima di visualizzare la pagina
• Nel caso sia nel viene eseguito
nel momento in cui viene incontrato nel
flusso di rendering della paginaAlcuni 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 testoElementi 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.
1
2
2
• (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 oggettiRappresentazione ad
albero
Esempio DOM
Questo è un esempio di documento
Con un solo paragrafoL’albero del documento
Document
document Element
html Text
Comment
head body
title h1 p
Esempio
DOM
Questo è un
esempio
Con un em paragrafo
di documento
soloL’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_NODEAccedere 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 documentCreazione 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 nuovoNodoAggiunta/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 ) in un’area prestabilita della pagina. Attenzione agli attributi (, 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 → cssFloatEsercizi
• 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 evidenziatePuoi anche leggere