Sommario

Transcript

Sommario
Contenuti del libro
Parte I
JavaCosa? Dove, come e perché di JavaScript
JavaScript è più di ciò che pensate . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Sviluppare in JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Sintassi e istruzioni JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Lavorare con le variabili e i tipi di dati . . . . . . . . . . . . . . . . . . . . . . 61
Utilizzare operatori ed espressioni . . . . . . . . . . . . . . . . . . . . . . . . . 99
1
2
3
4
5
Parte II
Applicare JavaScript
Controllare il flusso con strutture condizionali e loop . . . . . . . .
Lavorare con le funzioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gli oggetti di JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Il Browser Object Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
7
8
9
Parte III Integrare
10
11
12
13
14
15
16
17
18
19
20
JavaScript nella progettazione
Il Document Object Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gli eventi di JavaScript e il browser . . . . . . . . . . . . . . . . . . . . . . .
Utilizzare i cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Lavorare con le immagini in JavaScript . . . . . . . . . . . . . . . . . . . .
Utilizzare JavaScript con i web form . . . . . . . . . . . . . . . . . . . . . . .
JavaScript e CSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gestione degli errori in JavaScript . . . . . . . . . . . . . . . . . . . . . . . .
Parte IV AJAX
119
147
163
181
e l’integrazione lato-server
203
223
239
253
275
297
313
329
JavaScript e XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Applicazioni JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Un tocco di AJAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Qualche approfondimento su AJAX . . . . . . . . . . . . . . . . . . . . . . .
331
341
345
367
VII
VIII
Contenuti del libro
Parte V
jQuery
21
22
23
Introduzione alle librerie e ai framework JavaScript . . . . . . . . . 383
Introduzione a jQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
Effetti e plug-in di jQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
Sommario
Ringraziamenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XVII
Introduzione a JavaScript Passo per Passo,
Seconda Edizione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XIX
A chi è rivolto il libro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XX
Convenzioni e caratteristiche del libro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XX
Contenuto di supporto al libro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXI
Scaricare il contenuto di supporto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXI
Requisiti di sistema minimi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXII
Parte I JavaCosa? Dove, come e perché di JavaScript
1
JavaScript è più di ciò che pensate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Breve storia di JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
L’arrivo di Internet Explorer 3.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
E poi venne ECMAScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Molti standard... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Il DOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Cosa contiene un programma JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Posizione di JavaScript nella pagina web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Cosa JavaScript può fare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Cosa JavaScript non può fare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
JavaScript non può essere forzato su un client . . . . . . . . . . . . . . . . . . . . . . . 10
JavaScript non può garantire la sicurezza dei dati . . . . . . . . . . . . . . . . . . . . 11
JavaScript non può attraversare i domini . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
JavaScript non interagisce con il server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Suggerimenti per l’utilizzo di JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Dove mettere JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Quali browser dovrebbe supportare il sito . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Novità di ECMAScript versione 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Nuovi metodi per gli array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Nuovi controlli sulle proprietà degli oggetti . . . . . . . . . . . . . . . . . . . . . . . . . 16
Nuovo oggetto JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Modifiche all’oggetto Date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Una nuova modalità strict . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Supporto dei browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2
Sviluppare in JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Opzioni di sviluppo per JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Configurare l’ambiente di lavoro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Scrivere JavaScript con Visual Studio 2010 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Il vostro primo progetto web (e JavaScript) con
Visual Studio 2010 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Utilizzare file JavaScript esterni con Visual Studio 2010 . . . . . . . . . . . . . . . 28
IX
X
Sommario
Scrivere JavaScript con Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Il vostro primo progetto web (e JavaScript) con Eclipse . . . . . . . . . . . . . . . 33
Utilizzare file JavaScript esterni con Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Scrivere JavaScript senza un IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Il vostro primo progetto web (e JavaScript) con Blocco note . . . . . . . . . . . 41
Utilizzare file JavaScript esterni senza un IDE . . . . . . . . . . . . . . . . . . . . . . . . 44
Eseguire il debug di JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3
Sintassi e istruzioni JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Un po’ d’ordine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Sensibilità alle maiuscole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Spazio bianco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Commenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Punto e virgola . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Interruzioni di riga . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Posizionare il codice JavaScript correttamente . . . . . . . . . . . . . . . . . . . . . . . 53
Istruzioni JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Cos’è un’istruzione? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
I due tipi di istruzioni JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Parole riservate in JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Un rapido sguardo alle funzioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
La nuova modalità strict di JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4
Lavorare con le variabili
e i tipi di dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Tipi di dati in JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Lavorare con i numeri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Lavorare con le stringhe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Boolean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Null . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Undefined . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Oggetti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Definire e utilizzare le variabili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Dichiarare variabili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Tipi di variabile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Area di validità delle variabili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
L’oggetto Date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Utilizzare l’oggetto RegExp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
La sintassi delle espressioni regolari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Riferimenti e garbage collection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Comprendere le conversioni di tipo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Conversioni di numeri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Conversioni di stringhe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Conversioni di boolean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Sommario
5
Utilizzare operatori ed espressioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Conoscere gli operatori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Operatori additivi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Operatori di moltiplicazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Operatori bitwise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Operatori di uguaglianza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Operatori relazionali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
L’operatore in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
L’operatore instanceof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Operatori unari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Incrementare e decrementare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Convertire in un numero con il segno più . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Creare un numero negativo con il segno meno . . . . . . . . . . . . . . . . . . . . . 107
Negare con not bitwise e not logico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Utilizzare l’operatore delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Restituire tipi di variabili con l’operatore typeof . . . . . . . . . . . . . . . . . . . . . 111
L’operatore void . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Operatori di assegnazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
L’operatore virgola . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Parte II Applicare JavaScript
6
Controllare il flusso con strutture condizionali e loop . . . . . . . . . . . . . . . . 119
If (se e come) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Sintassi delle istruzioni if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
La funzione prompt() in Internet Explorer . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Condizioni composte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
Utilizzare le istruzioni else if e else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Lavorare con i condizionali ternari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Eseguire test con switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Eseguire loop con while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
L’istruzione while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
L’istruzione do...while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Utilizzare i loop for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Il loop for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Il loop for...in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Il loop for each...in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Convalidare i form tramite condizionali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
7
Lavorare con le funzioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Cos’è una funzione? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Argomenti delle funzioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
Validità delle variabili rivisitata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Valori return . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Ulteriori informazioni sulla chiamata di funzioni . . . . . . . . . . . . . . . . . . . . 152
XI
XII
Sommario
Funzioni anonime o senza nome (letterali funzione) . . . . . . . . . . . . . . . . . 154
Closure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Metodi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Uno sguardo alle funzioni di dialogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
8
Gli oggetti di JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Sviluppo a oggetti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Oggetti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Proprietà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Metodi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Classi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Creare oggetti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Aggiungere proprietà agli oggetti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Aggiungere metodi agli oggetti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Ulteriori informazioni sugli array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
La proprietà length . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
Metodi di array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
Sfruttare gli oggetti predefiniti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
L’oggetto Global . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
9
Il Browser Object Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
Introduzione al browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
La gerarchia del browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
Eventi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
Il senso di self . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Ottenere informazioni sullo schermo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Utilizzare l’oggetto navigator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
L’oggetto location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
L’oggetto history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Parte III Integrare JavaScript nella progettazione
10
Il Document Object Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
Definizione del Document Object Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
DOM Level 0: il DOM legacy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
DOM Level 1 e DOM Level 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
Il DOM come struttura ad albero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
Lavorare con i nodi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Recuperare elementi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Recuperare elementi tramite l’ID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Recuperare elementi tramite il nome del tag . . . . . . . . . . . . . . . . . . . . . . . 210
Collection in HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Lavorare con i pari livello . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Sommario
Lavorare con gli attributi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Visualizzare gli attributi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Impostare gli attributi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
Creare elementi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Aggiungere testo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Aggiungere un elemento e impostare un ID . . . . . . . . . . . . . . . . . . . . . . . . 219
Eliminare elementi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
11
Gli eventi di JavaScript e il browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Comprendere gli eventi della finestra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
I modelli di eventi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Un gestore di evento generico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
Rilevare informazioni sul visitatore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Un breve sguardo alla proprietà userAgent . . . . . . . . . . . . . . . . . . . . . . . . 229
Test delle funzionalità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
Mantenere il JavaScript lontano dai vecchi browser . . . . . . . . . . . . . . . . . 231
Altre proprietà e metodi di navigator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
Aprire, chiudere e ridimensionare le finestre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Best practice per l’apertura delle finestre . . . . . . . . . . . . . . . . . . . . . . . . . . 234
Aprire nuove schede: non serve JavaScript? . . . . . . . . . . . . . . . . . . . . . . . . 235
Ridimensionare e spostare le finestre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
Timer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
12
Utilizzare i cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Comprendere i cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Creare cookie con JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Esaminare un semplice cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Impostare la data di scadenza del cookie . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Impostare il percorso del cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
Impostare il dominio del cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Lavorare con cookie sicuri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
Leggere i cookie con JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
Rimuovere i cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
13
Lavorare con le immagini
in JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
Utilizzare i rollover immagine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
Un rollover semplice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
Rollover moderni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
Precaricare le immagini . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
Creare presentazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Creare una presentazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Spostarsi all’indietro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
Utilizzare le mappe immagine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
XIII
XIV
Sommario
14
Utilizzare JavaScript con i web form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
JavaScript e i web form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Ottenere i dati dei form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Lavorare con le informazioni dei form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Lavorare con le caselle di selezione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Lavorare con le caselle di controllo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
Lavorare con i pulsanti di opzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
Preconvalidare i dati dei form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Hacking della convalida JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Convalidare un campo di testo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
15
JavaScript e CSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
Cos’è CSS? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
Utilizzare proprietà e selettori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
Applicare CSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
La relazione fra JavaScript e CSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
Impostare gli stili degli elementi tramite l’ID . . . . . . . . . . . . . . . . . . . . . . . 300
Impostare gli stili degli elementi tramite il tipo . . . . . . . . . . . . . . . . . . . . . 304
Impostare le classi CSS con JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
Recuperare gli stili degli elementi con JavaScript . . . . . . . . . . . . . . . . . . . . 307
Modificare i fogli di stile con JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
16
Gestione degli errori in JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
Due modi per gestire gli errori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
Utilizzare try/catch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
E finally... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
Utilizzare l’evento onerror . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
Associare onerror all’oggetto window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
Ignorare gli errori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
Associare onerror all’oggetto image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
Parte IV AJAX e l’integrazione lato-server
17
JavaScript e XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
Utilizzare XML con JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
Un esempio di documento XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
Caricare un documento XML con JavaScript . . . . . . . . . . . . . . . . . . . . . . . . 332
Lavorare con dati XML da Excel 2007 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
Un’anteprima del futuro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
18
Applicazioni JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
Componenti delle applicazioni JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
I magnifici tre: visualizzazione, comportamento e dati . . . . . . . . . . . . . . . 341
JavaScript e le interfacce web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
Sommario
19
Un tocco di AJAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
Introduzione ad AJAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
L’oggetto XMLHttpRequest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
Istanziare l’oggetto XMLHttpRequest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
Inviare una richiesta AJAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
Elaborare una risposta AJAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
Elaborare risposte XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
Lavorare con JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
Elaborare le intestazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
Utilizzare il metodo POST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
Caso di studio: ricerca e aggiornamento live . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
20
Qualche approfondimento su AJAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
Creare una tabella HTML con XML e CSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
Stilizzare la tabella con CSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371
Cambiare gli attributi di stile con JavaScript . . . . . . . . . . . . . . . . . . . . . . . . 371
Creare una casella a discesa dinamica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
Accettare input dall’utente e AJAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
Parte V jQuery
21
Introduzione alle librerie e ai framework JavaScript . . . . . . . . . . . . . . . . . 383
Comprendere le librerie di programmazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
Definire una propria libreria JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
Librerie e framework JavaScript diffusi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
jQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
Yahoo! User Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
MooTools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
Altre librerie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
22
Introduzione a jQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
Presentazione di jQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
Utilizzare jQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
I due download di jQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
Includere jQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
Sintassi jQuery di base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
Collegare jQuery all’evento load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
Utilizzare i selettori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
Selezionare elementi tramite l’ID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
Selezionare elementi tramite la classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
Selezionare elementi tramite il tipo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
Selezionare elementi tramite la gerarchia . . . . . . . . . . . . . . . . . . . . . . . . . . 392
Selezionare elementi tramite la posizione . . . . . . . . . . . . . . . . . . . . . . . . . . 393
Selezionare elementi tramite un attributo . . . . . . . . . . . . . . . . . . . . . . . . . . 396
XV
XVI
Sommario
Selezionare elementi dei form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
Altri selettori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
Funzioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
Attraversare il DOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
Lavorare con gli attributi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
Modificare il testo e l’HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
Inserire elementi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
Funzioni callback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
Eventi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
Associare e disassociare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
Eventi del mouse e hover . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
Altri gestori di evento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408
AJAX e jQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409
Errori e timeout AJAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
Inviare dati al server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
Altre opzioni importanti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
Altro codice jQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
23
Effetti e plug-in di jQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
Funzionalità centrali per migliorare l’usabilità . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
Effetti nativi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
jQuery UI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
Utilizzare jQuery UI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
Drag-and-drop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421
Accordion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
Ulteriori informazioni su jQuery UI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428
Appendice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
Indice analitico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459
L’autore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474