SlideShare uma empresa Scribd logo
1 de 45
Esercitazioni di Sistemi Distribuiti
2014/2015
Javascript e jQuery 1
Giuseppe Vizzari
Outline
• Concetti base
– Markup vs programmazione, scripting, client-side, AJAX...
• Un 'crash course' di JavaScript
– Variabili
– Array
– Strutture di controllo del flusso
– Funzioni
• Introduzione a jQuery ‘by example’
– Selezione e modifica di elementi di una pagina
– Gestione di eventi
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 2
Outline
• Concetti base
– Markup vs programmazione, scripting, client-side, AJAX...
• Un 'crash course' di JavaScript
– Variabili
– Array
– Strutture di controllo del flusso
– Funzioni
• Introduzione a jQuery ‘by example’
– Selezione e modifica di elementi di una pagina
– Gestione di eventi
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 3
Markup vs Programmazione
• Linguaggio di programmazione: utilizzato per comunicare istruzioni
a una macchina di calcolo, per definire programmi che controllino il
comportamento di un calcolatore
• Linguaggio di markup: utilizzato per annotare un documento in
modo tale che l'annotazione sia sintatticamente distinguibile dal
testo
• Esempi di linguaggi di markup:
– TeX (e LaTeX)
– SGML
– HTML, XHTML, XML
• Le annotazioni possono avere diverse finalità:
– di presentazione (definiscono come visualizzare il testo al quale sono
associate)
– procedurali (definiscono istruzioni per programmi che elaborino il testo
al quale sono associate)
– descrittive (etichettano semplicemente parti del testo, disaccoppiando
la struttura dalla presentazione del testo stesso)
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 4
Linguaggi di Scripting
• Linguaggio di programmazione per l'automazione di compiti
altrimenti eseguibili da un utente umano all'interno di un
ambiente software
• Variano da linguaggi molto specifici per applicazioni e domini
ristretti (e.g. MAXScript per 3ds Max), a linguaggi general
purpose (e.g. Python)
• Caratteristiche tipiche:
– Semplicità ma...
– Specificità, orientamento a funzionalità limitate
– Interpretati, raramente compilati, spesso molto dinamici
• Curiosità
– Lisp (nella sua variante AutoLISP) è incluso nelle versioni complete
di AutoCAD
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 5
JavaScript
• JavaScript è un linguaggio di programmazione interpretato
inizialmente progettato per permettere l'esecuzione di script
all'interno di browser web, lato client, per l'interazione con
l'utente, la validazione di dati all'interno di form, la modifica di
documenti web senza effetto 'pagina bianca', ...
• JavaScript è dinamico, debolmente tipizzato, la cui sintassi è
stata influenzata dal C e da Java
• Non analizzeremo il linguaggio ad un livello di dettaglio analogo
rispetto a quello che avete visto per Java nei vari corsi di
programmazione...
• ... vedremo, tramite esempi concreti, come può essere utilizzato
per costruire pagine web dinamiche, capaci di riutilizzare servizi
web resi disponibili da terze parti, componendo – più che
programmando – applicazioni web
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 6
Lato client
• JavaScript è (di norma)
eseguito ‘lato client’
• Nel mondo web una serie di
tecnologie (non ultime le
servlet e JSP, ma anche PHP,
Ruby on Rails) rappresentano
tecnologie ‘lato server’
– Nella tipica architettura a 3 tier
le tecnologie lato server
realizzano gran parte delle
logiche applicative e accesso
ai dati (logic e data tier)
• Altre tecnologie ‘lato client’
sono ad esempio Flash, le
Applet di Java
A.A. 2013/2014 Esercitazioni di Sistemi Distribuiti 7
http://en.wikipedia.org/wiki/Multitier_architecture
Outline
• Concetti base
– Markup vs programmazione, scripting, client-side, AJAX...
• Un 'crash course' di JavaScript
– Variabili
– Array
– Strutture di controllo del flusso
– Funzioni
• Introduzione a JQuery ‘by example’
– Selezione e modifica di elementi di una pagina
– Gestione di eventi
A.A. 2013/2014 Esercitazioni di Sistemi Distribuiti 8
Testo consigliato
• Gli esercizi che verranno proposti sono
tratti dal testo JavaScript & jQuery: The
Missing Manual di David Sawyer
McFarland, ed. O'Reilly
• Gli esercizi e tutti file necessari per il loro
svolgimento sono scaricabili da
http://sawmac.com/js2e/
• Il libro tratta più temi rispetto a quelli che
verranno discussi a lezione e lo fa in
modo più approfondito
• Ulteriori risorse utili per approfondimento
e documentazione sono disponibili
gratuitamente in rete, ad esempio:
– JavaScript in generale:
http://www.quirksmode.org/js/contents.html
http://eloquentjavascript.net
– jQuery:
http://docs.jquery.com/Tutorials
http://www.w3schools.com/jquery/default.asp
A.A. 2013/2014 Esercitazioni di Sistemi Distribuiti 9
L'inevitabile 'Hello world!' (1)
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World</title>
<link href="../_css/site.css" rel="stylesheet">
<script>
alert('hello world');
</script>
</head>
<body>
<div class="wrapper">
<div class="header”> [...] </div>
<div class="content”> [...] </div>
<div class="aside"> </div>
</div>
<div class="footer”> [...] </div>
</div>
</body>
</html>
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 10
L'inevitabile 'Hello world!' (2)
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World</title>
<link href="../_css/site.css" rel="stylesheet">
</head>
<body>
<div class="wrapper">
<div class="header”> [...] </div>
<div class="content">
<div class="main">
<h1>Writing to the Document Window</h1>
<script>
document.write('<p>Hello world!</p>');
</script>
</div>
<div class="aside"> </div>
</div>
<div class="footer”> [...] </div>
</div>
</body>
</html>
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 11
Debugging – la console degli errori
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World</title>
<link href="../_css/site.css" rel="stylesheet">
<script src="../_js/jquery-1.7.2.min.js"></script>
<script>
$(document).ready(function() {
$('body').hide().fadeIn('slow);
});
</script>
</head>
<body>
<div class="wrapper">
<div class="header”> [...] </div>
<div class="content”> [...] </div>
<div class="aside"> </div>
</div>
<div class="footer”> [...] </div>
</div>
</body>
</html>
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 12
Debugging – la console degli errori
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 13
Variabili (1)
<div class="content">
<div class="main">
<h1>Using a Variable</h1>
<script>
var firstName = 'Cookie';
var lastName = 'Monster';
//var lastName = 'Jar';
document.write('<p>');
document.write(firstName + ' ' + lastName);
document.write('</p>');
</script> </div>
</div>
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 14
Variabili (2)
<!DOCTYPE html>
<html>
<head>
[...]
<script>
var name = prompt('What is your name?', '');
</script>
</head>
<body>
<div class="wrapper">
<div class="header”> [...]
</div>
<div class="content">
<div class="main">
<h1>Using a Variable, Part II</h1>
<script>
document.write('<p>Welcome ' + name + '</p>');
</script>
</div>
</div>
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 15
Variabili e operatori –
approfondimento (1)
• Variabili non tipizzate, “tipo” dinamico
var lastName = 'Monster';
lastName = 3; // No problem, here...
• Attenzione alla semantica degli operatori, dipendente dal contenuto delle
variabili...
var numshoes = '2';
var numsocks = 4;
document.write('<p>' + numshoes + numsocks + '</p>')
document.write('<p>');
document.write(+ numshoes + numsocks);
document.write('</p>');
• Operatori matematici di Java consueti
var numsocks = 4;
var numshoes = 2;
numsocks = (numsocks/2) + numshoes;
numsocks += --numshoes;
numshoes /= 2;
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 16
Variabili e operatori –
approfondimento (2)
• Attenzione agli operatori di comparazione i noti == e !=,
ma anche === e !==
• I primi due, qualora le espressioni confrontate non siano dello
stesso tipo, cercano di effettuare una conversione, quindi
possono generare effetti sorprendenti ed errori
• Esempi:
– 0 == '0' ma 0 !== '0’
• In generale alcuni programmatori esperti (ad es. Douglas
Crockford, JavaScript architect di Yahoo) suggeriscono di usare
la versione che non effettua la conversione di tipo
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 17
Array (1)
<div class="content">
<div class="main">
<h1>Creating and Using Arrays</h1>
<script>
var authors = [ 'Ernest Hemingway',
'Charlotte Bronte',
'Dante Alighieri',
'Emily Dickinson'
];
document.write('<p>The first author is <strong>');
document.write(authors[0] + '</strong></p>');
document.write('<p>The last author is <strong>');
document.write(authors[authors.length-1] + '</strong></p>');
authors.unshift('Stan Lee');
document.write('<p>I almost forgot <strong>');
document.write(authors[0]);
document.write('</strong></p>');
authors.push('Umberto Eco');
document.write('<p>And finally... <strong>');
document.write(authors[authors.length-1]);
document.write('</strong></p>');
</script> </div>
</div>
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 18
Array (2)
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 19
Array - approfondimento
• Sintassi analoga a Java ma nessuna necessità di
inizializzazione
• Attributo length, elementi dalla posizione 0 a length-1
• Natura essenzialmente dinamica
authors.push('Umberto Eco');
equivale a
authors[length]='Umberto Eco’;
• Funzioni varie di utilità, passaggio da array di stringhe a
stringhe e viceversa...
var myarr = ["Mack", "the", "Knife"];
document.write("<p>myarr: " + myarr + " </p>");
var flattened = myarr.join(" ");
document.write("<p>flattened: " + flattened + " </p>");
var newarr = flattened.split(" ");
document.write("<p>myarr: " + newarr + " </p>");
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 20
Strutture dati generalizzate
<div class="content">
<div class="main">
<h1>Using Conditional Statements</h1>
<script>
var myauthor = {name: 'Ernest Hemingway', "born": 1899, died: 1961 };
document.write('<p>The author's name is <strong>');
document.write(myauthor.name + '</strong></p>');
document.write('<p>He was born in <strong>');
document.write(myauthor["born"] + '</strong></p>');
document.write('<p>He died in <strong>');
document.write(myauthor.died + '</strong></p>');
delete myauthor.died;
myauthor.death=1961;
document.write('<p>This is another field <strong>' + myauthor.death);
document.write('</strong></p>');
if(myauthor.died === undefined)
document.write('<p>The previous one is now undefined.</p>');
</script> </div>
</div>
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 21
Strutture dati generalizzate -
approfondimento
• Oggetti JavaScript usabili per rappresentare record e strutture
composite
• Delimitatori parentesi graffe, struttura interna basata su property
var mailArchive = {0: "Dear nephew, ... (mail number 1)",
1: "(mail number 2)",
2: "(mail number 3)"};
for (var current = 0; current in mailArchive; current++) {
print("Processing e-mail #” + current);
print(": ” + mailArchive[current]);
}
• Strutture dinamiche, non “tipizzate”
var cat = {colour: "grey", name: "Spot", size: 46};
cat.size = 47;
delete cat.size; // Now (cat.size == undefined)
cat.weight = 5.5;
• Attenzione null e undefined sono oggetti veri e propri, il primo
rappresenta una variabile definita ma con valore ‘vuoto’, la seconda
un variabile non definita; inoltre:
– null == undefined ma null !== undefined
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 22
Controllo di flusso (1)
<div class="content">
<div class="main">
<h1>Using Conditional Statements</h1>
<script>
do {
var luckyNumber = prompt('What is your lucky number?','');
luckyNumber = parseInt(luckyNumber, 10);
} while (isNaN(luckyNumber));
if (luckyNumber == 7 ) {
document.write("<p>Hey, 7 is my lucky number too!</p>");
} else if (luckyNumber == 13 || luckyNumber == 24) {
document.write("<p>Wooh. " + luckyNumber);
document.write("? That's an unlucky number!</p>");
} else {
document.write("<p>The number " + luckyNumber);
document.write(“is lucky for you!</p>");
}
</script> </div>
</div>
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 23
Controllo di flusso - approfondimento
• Strutture di selezione - if
if (cond1){
// door #1
} else if (cond2){
// door #2
} else {
// door #3
}
• Strutture di selezione – switch
switch(var){
case 'val1':
// door #1
break;
case 'val2':
// door #2
break;
default:
// door #3
}
• Strutture di iterazione – while
while(cond){
// code to iterate
}
• Strutture di iterazione – do while
do {
// code to iterate
} while(cond);
• Strutture di iterazione – for
for(init; cond; step){
// code to iterate
}
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 24
Controllo di flusso e funzioni
<div class="content"> <div class="main"> <h1>A Simple Quiz</h1>
<script>
var score=0;
var questions = [
['How many moons does Earth have?', 1],
['How many moons does Saturn have?',31],
['How many moons does Venus have?', 0]
];
function askQuestion(question) {
var answer = prompt(question[0],'');
if (answer == question[1]) {
alert('Correct!');
score++;
} else {
alert('Sorry. The correct answer is ' + question[1]);
}
}
for (var i=0; i<questions.length; i++) {
askQuestion(questions[i]);
}
var message = 'You got ' + score;
message += ' out of ' + questions.length;
message += ' questions correct.';
document.write('<p>' + message + '</p>');
</script> </div>
</div>
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 25
Funzioni e scoping
<div class="content">
<div class="main">
<h1>Scoping...</h1>
<script>
var message = 'Global variable...';
function warningA() {
var message = 'Local variable...';
alert(message);
}
function warningB() {
alert(message);
}
warningA();
warningB();
alert(message);
</script>
</div>
</div>
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 26
Outline
• Concetti base
– Markup vs programmazione, scripting, client-side, AJAX...
• Un 'crash course' di JavaScript
– Variabili
– Array
– Strutture di controllo del flusso
– Funzioni
• Introduzione a jQuery ‘by example’
– Selezione e modifica di elementi di una pagina
– Gestione di eventi
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 27
jQuery in breve...
• jQuery è un framework JavaScript che rende molto semplice la
scrittura di applicazioni web offrendo funzionalità quali
– manipolazione di HTML/DOM e CSS
– metodi per eventi HTML
– effetti e animazioni
– supporto a programmazione AJAX
– varie altre utilità (anche tramite plugin)
• Abbiamo scelto jQuery per il corso perché è
– diffuso, testato e manutenuto (utilizzato in siti come Dell, Digg, NBC
e da Google in alcuni progetti; è incluso in WordPress; ...)
– open source
– compatto (meno di 100kb, se compresso)
– può essere esteso con una serie di plugin di vario genere
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 28
Selezione e modifica elementi di una
pagina (1)
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 29
Selezione e modifica elementi di una
pagina (2)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Using Functions</title>
<link href="../_css/site.css" rel="stylesheet">
</head>
<body>
<div class="header”> [...] </div>
<div class="content">
<div class="main">
<h1>Auto-Pull Quotes</h1>
<h2>Vestibulum semper</h2>
<p>Vestibulum semper [...] <span class="pq">Vivamus justo mi, aliquam vitae, eleifend et, lobortis quis,
eros.</span>
[...] </p>
<h2>Morbi dictum</h2>
<p>Donec at sapien [...] <span class="pq">Etiam mattis. Donec sed diam nec odio molestie iaculis.</span>
[...] </p>
<h2>Praesent sed est</h2>
<p>Praesent sed est ac metus facilisis [...] </p>
<p>Integer lacus. [...] </p>
</div>
</div>
<div class="footer”> [...] </div>
</body>
</html>
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 30
Selezione e modifica elementi di una
pagina (3)
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 31
Selezione e modifica elementi di una
pagina (4)
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 32
Selezione e modifica elementi di una
pagina (5)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Using Functions</title>
<link href="../_css/site.css" rel="stylesheet">
<style>
.pullquote {
float: right;
clear: right;
width: 200px;
border: 1px solid black;
padding: 10px;
font-size: 20px;
background-color:rgb(195,151,51);
margin: 20px 0 10px 10px;
font-style: italic;
color: rgb(255,255,255);
}
</style>
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 33
Selezione e modifica elementi di una
pagina (6)
<head>
[...]
<script src="../_js/jquery-1.7.2.min.js"></script>
<script>
$(document).ready(function() {
$('span.pq').each(function() {
var quote=$(this).clone();
quote.removeClass('pq');
quote.addClass('pullquote');
$(this).before(quote);
}); // end each
}); // end ready
</script>
</head>
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 34
Elementi base di jQuery (1)
• La sintassi di jQuery è specificamente orientata a permettere una rapida e
semplice selezione di elementi del documento HTML
• La sintassi base di un comando jQuery è
$(selector).action()
– Il $ definisce l’accesso a funzionalità offerte da jQuery
– selector viene utilizzato per specificare una sorta di query per selezionare
una parte del documento HTML
– action specifica un’azione da effettuare sull’elemento stesso
• La porzione
$(document).ready(function() {
[...]
}); // end ready
indica che vogliamo effettuare l’azione ready sull’oggetto document
passando come parametro una funzione anonima, specificata per esteso
• L’azione ready specifica che il parametro ricevuto, una funzione, va
richiamata non appena il documento è ‘pronto’, ovvero è stato
completamente caricato
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 35
Elementi base di jQuery (2)
• Quello che vorremmo fare, nel nostro esempio, è selezionare le
porzioni di documento negli span di classe pq, clonarli dandogli
al contempo lo stile desiderato
• Il selettore per individuare tutti gli span di classe pq è $
('span.pq')
• Per iterare su un insieme di elementi jQuery offre la funzione
each
• La porzione
$('span.pq').each(function() {
[...]
}); // end each
permette di specificare una funzione anonima che va applicata
ad ogni span di classe pq
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 36
Elementi base di jQuery (3)
• A questo punto possiamo operare sui singoli span...
• In particolare il selettore $(this), trovandoci all’interno di una
funzione chiamata (implicitamente) su uno degli span stessi, ci
permette di ottenere il riferimento che ci serve
• La porzione
var quote=$(this).clone();
quote.removeClass('pq');
quote.addClass('pullquote');
$(this).before(quote);
permette quindi di
– clonare lo span nella variabile quote,
– rimuoverne la classe pq,
– aggiungerne la classe pullquote,
– aggiungere la variabile stessa al documento, appena prima dello
span stesso
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 37
Gestione di eventi e modifica dinamica
di una pagina (1)
<!DOCTYPE html>
<html>
<head> <meta charset="UTF-8">
<title>A One Page Faq</title>
<link href="../_css/site.css" rel="stylesheet">
</head>
<body>
<div class="header"> [...] </div>
<div class="content”>
<div class="main">
<h1>A One Page FAQ</h1>
<h2>I've heard that JavaScript is the long-lost fountain of youth. Is this true?</h2>
<div class="answer"> <p>Why, yes it is! Studies prove that learning JavaScript freshens the mind and extends
life span by several hundred years. (Note: some scientists disagree with these claims.)</p> </div>
<h2>Can JavaScript really solve all of my problems?</h2>
<div class="answer”> <p>Why, yes it can! It's the most versatile programming language ever created and is
trained to provide financial management advice, life-saving CPR, and even to take care of household pets.</p>
</div>
<h2>Is there nothing JavaScript <em>can&#8217;t</em> do?</h2>
<div class="answer"> <p>Why, no there isn&#8217;t! It&#8217;s even able to write its own public relations-
oriented Frequently Asked Questions pages. Now that&#8217;s one smart programming language!</p> </div>
</div>
</div>
<div class="footer"> [...] </div>
</div>
</body>
</html>
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 38
Gestione di eventi e modifica dinamica
di una pagina (2)
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 39
Gestione di eventi e modifica dinamica
di una pagina (3)
<!DOCTYPE html>
<html>
<head> <meta charset="UTF-8">
<title>A One Page Faq</title>
<link href="../_css/site.css" rel="stylesheet">
<style type="text/css">
h2 {
background: url(../_images/open.png) no-repeat 0 11px;
padding: 10px 0 0 25px;
cursor: pointer;
}
h2.close {
background-image: url(../_images/close.png);
}
.answer {
margin-left: 25px;
}
</style>
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 40
Gestione di eventi e modifica dinamica
di una pagina (4)
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 41
Gestione di eventi e modifica dinamica
di una pagina (5)
<script src="../_js/jquery-1.7.2.min.js"></script>
<script>
$(document).ready(function() {
$('.answer').hide();
$('.main h2').toggle(
function() {
$(this).next('.answer').slideDown();
$(this).addClass('close');
},
function() {
$(this).next('.answer').fadeOut();
$(this).removeClass('close');
}
); // end toggle
}); // end ready
</script>
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 42
Ulteriori elementi di base di jQuery
• Tramite la tecnica precedentemente illustrata definiamo il da
farsi al caricamento della pagina
• La porzione di codice
$('.answer').hide();
$('.main h2').toggle(
[...]
}
specifica che:
– in primis, i div di classe answer devono essere nascosti
– in seconda battuta, ai tag h2 che siano figli di un div di classe
main, va applicata la funzione toggle
[segue...]
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 43
Ulteriori elementi di base di jQuery
• La funzione toggle permette di associare a un elemento due diverse
funzioni, da chiamare rispettivamente per ogni click dispari e pari
• In questa porzione di codice
$('.main h2').toggle(
function() {
$(this).next('.answer').slideDown();
$(this).addClass('close');
},
function() {
$(this).next('.answer').fadeOut();
$(this).removeClass('close');
}
); // end toggle
}
si associano due funzioni anonime:
– la prima: (i) seleziona il primo div di tipo answer che segue l’oggetto corrente
(il tag h2) e vi applica la funzione slideDown, (ii) aggiunge la classe close
all’oggetto corrente
– la seconda: (i) seleziona il primo div di tipo answer che segue l’oggetto
corrente e vi applica la funzione fadeOut, (ii) aggiunge la classe close
all’oggetto corrente
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 44
Prossima lezione
• Ancora jQuery
– Approfondimento sulla gestione di eventi
– Ulteriori esempi di interfacce dinamiche
– Validazione di form
– Ajax di base
• Un esempio articolato
A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 45

Mais conteúdo relacionado

Mais procurados

Introduzione a JavaScript e jQuery (2/2)
Introduzione a JavaScript e jQuery (2/2)Introduzione a JavaScript e jQuery (2/2)
Introduzione a JavaScript e jQuery (2/2)Giuseppe Vizzari
 
Breve introduzione alle tecnologie HTML5 + (DOM) + CSS
Breve introduzione alle tecnologie HTML5 + (DOM) + CSS Breve introduzione alle tecnologie HTML5 + (DOM) + CSS
Breve introduzione alle tecnologie HTML5 + (DOM) + CSS Giuseppe Vizzari
 
05 - Introduzione al Web II
05 - Introduzione al Web II05 - Introduzione al Web II
05 - Introduzione al Web IIGiuseppe Vizzari
 
1 - Introduzione al corso 18/19
1 - Introduzione al corso 18/191 - Introduzione al corso 18/19
1 - Introduzione al corso 18/19Giuseppe Vizzari
 
1 - Introduzione al corso 17/18
1 - Introduzione al corso 17/181 - Introduzione al corso 17/18
1 - Introduzione al corso 17/18Giuseppe Vizzari
 
WordPress e il vostro blog - 18/19
WordPress e il vostro blog - 18/19WordPress e il vostro blog - 18/19
WordPress e il vostro blog - 18/19Giuseppe Vizzari
 
15 - Web designer vs Web developer
15 - Web designer vs Web developer15 - Web designer vs Web developer
15 - Web designer vs Web developerGiuseppe Vizzari
 
9 - WordPress e il vostro blog - 16/17
9 - WordPress e il vostro blog - 16/179 - WordPress e il vostro blog - 16/17
9 - WordPress e il vostro blog - 16/17Giuseppe Vizzari
 
Le applicazioni web e i CMS (18/19)
Le applicazioni web e i CMS (18/19)Le applicazioni web e i CMS (18/19)
Le applicazioni web e i CMS (18/19)Giuseppe Vizzari
 
Introduzione - Esercitazioni (18/19)
Introduzione - Esercitazioni (18/19)Introduzione - Esercitazioni (18/19)
Introduzione - Esercitazioni (18/19)Andrea Gorrini
 
5 - Introduzione al Web (2/2) - 17/18
5 - Introduzione al Web (2/2) - 17/185 - Introduzione al Web (2/2) - 17/18
5 - Introduzione al Web (2/2) - 17/18Giuseppe Vizzari
 
08 - WordPress e il vostro blog
08 - WordPress e il vostro blog08 - WordPress e il vostro blog
08 - WordPress e il vostro blogGiuseppe Vizzari
 
13 - Web feed e aggregatori
13 - Web feed e aggregatori13 - Web feed e aggregatori
13 - Web feed e aggregatoriGiuseppe Vizzari
 
01 - Introduzione al Corso Strumenti e Applicazioni del Web - CdLM in TTC - 2...
01 - Introduzione al Corso Strumenti e Applicazioni del Web - CdLM in TTC - 2...01 - Introduzione al Corso Strumenti e Applicazioni del Web - CdLM in TTC - 2...
01 - Introduzione al Corso Strumenti e Applicazioni del Web - CdLM in TTC - 2...Giuseppe Vizzari
 

Mais procurados (20)

Introduzione a JavaScript e jQuery (2/2)
Introduzione a JavaScript e jQuery (2/2)Introduzione a JavaScript e jQuery (2/2)
Introduzione a JavaScript e jQuery (2/2)
 
Breve introduzione alle tecnologie HTML5 + (DOM) + CSS
Breve introduzione alle tecnologie HTML5 + (DOM) + CSS Breve introduzione alle tecnologie HTML5 + (DOM) + CSS
Breve introduzione alle tecnologie HTML5 + (DOM) + CSS
 
05 - Introduzione al Web II
05 - Introduzione al Web II05 - Introduzione al Web II
05 - Introduzione al Web II
 
HTML (+ DOM) + CSS
HTML (+ DOM) + CSSHTML (+ DOM) + CSS
HTML (+ DOM) + CSS
 
07 - Web apps e CMS
07 - Web apps e CMS07 - Web apps e CMS
07 - Web apps e CMS
 
1 - Introduzione al corso 18/19
1 - Introduzione al corso 18/191 - Introduzione al corso 18/19
1 - Introduzione al corso 18/19
 
1 - Introduzione al corso 17/18
1 - Introduzione al corso 17/181 - Introduzione al corso 17/18
1 - Introduzione al corso 17/18
 
WordPress e il vostro blog - 18/19
WordPress e il vostro blog - 18/19WordPress e il vostro blog - 18/19
WordPress e il vostro blog - 18/19
 
09 - Ricercare nel Web I
09 - Ricercare nel Web I09 - Ricercare nel Web I
09 - Ricercare nel Web I
 
6 - Il browser - 16/17
6 - Il browser - 16/176 - Il browser - 16/17
6 - Il browser - 16/17
 
15 - Web designer vs Web developer
15 - Web designer vs Web developer15 - Web designer vs Web developer
15 - Web designer vs Web developer
 
9 - WordPress e il vostro blog - 16/17
9 - WordPress e il vostro blog - 16/179 - WordPress e il vostro blog - 16/17
9 - WordPress e il vostro blog - 16/17
 
Le applicazioni web e i CMS (18/19)
Le applicazioni web e i CMS (18/19)Le applicazioni web e i CMS (18/19)
Le applicazioni web e i CMS (18/19)
 
Introduzione - Esercitazioni (18/19)
Introduzione - Esercitazioni (18/19)Introduzione - Esercitazioni (18/19)
Introduzione - Esercitazioni (18/19)
 
5 - Introduzione al Web (2/2) - 17/18
5 - Introduzione al Web (2/2) - 17/185 - Introduzione al Web (2/2) - 17/18
5 - Introduzione al Web (2/2) - 17/18
 
08 - WordPress e il vostro blog
08 - WordPress e il vostro blog08 - WordPress e il vostro blog
08 - WordPress e il vostro blog
 
13 - Web feed e aggregatori
13 - Web feed e aggregatori13 - Web feed e aggregatori
13 - Web feed e aggregatori
 
9 - Ricercare nel Web
9 - Ricercare nel Web9 - Ricercare nel Web
9 - Ricercare nel Web
 
01 - Introduzione al Corso Strumenti e Applicazioni del Web - CdLM in TTC - 2...
01 - Introduzione al Corso Strumenti e Applicazioni del Web - CdLM in TTC - 2...01 - Introduzione al Corso Strumenti e Applicazioni del Web - CdLM in TTC - 2...
01 - Introduzione al Corso Strumenti e Applicazioni del Web - CdLM in TTC - 2...
 
8 - Il browser
8 - Il browser8 - Il browser
8 - Il browser
 

Destaque

DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptSinergia Totale
 
Sistemi di messaging 19 01-2016
Sistemi di messaging 19 01-2016Sistemi di messaging 19 01-2016
Sistemi di messaging 19 01-2016Matteo Brugnetta
 
Slide openvsclosed-source
Slide openvsclosed-sourceSlide openvsclosed-source
Slide openvsclosed-sourceOpen vs Closed
 
Digital Marketing: come avere visibilità sul web
Digital Marketing: come avere visibilità sul webDigital Marketing: come avere visibilità sul web
Digital Marketing: come avere visibilità sul webAntonio Pizzoferrato
 
Diritto all'oblio - Internet Archive
Diritto all'oblio - Internet ArchiveDiritto all'oblio - Internet Archive
Diritto all'oblio - Internet ArchivePaulFraska
 
Questione di Feedback
Questione di FeedbackQuestione di Feedback
Questione di FeedbackGreta89
 
Geolocalizzazione: vantaggi e svantaggi
Geolocalizzazione: vantaggi e svantaggiGeolocalizzazione: vantaggi e svantaggi
Geolocalizzazione: vantaggi e svantaggiBruna Portaluppi
 
Font analysis
Font analysisFont analysis
Font analysisJamelotti
 
17 - Web feed e aggregatori
17 - Web feed e aggregatori17 - Web feed e aggregatori
17 - Web feed e aggregatoriGiuseppe Vizzari
 
19 - Wiki, Wikipedia e Open Internet
19 - Wiki, Wikipedia e Open Internet19 - Wiki, Wikipedia e Open Internet
19 - Wiki, Wikipedia e Open InternetGiuseppe Vizzari
 
15 - La forma breve e il microblogging
15 - La forma breve e il microblogging15 - La forma breve e il microblogging
15 - La forma breve e il microbloggingGiuseppe Vizzari
 
18 - Content sharing sites
18 - Content sharing sites18 - Content sharing sites
18 - Content sharing sitesGiuseppe Vizzari
 
R-IoT Retail IoT - Come le IoT influenzano il mercato del Retail
R-IoT Retail IoT - Come le IoT influenzano il mercato del RetailR-IoT Retail IoT - Come le IoT influenzano il mercato del Retail
R-IoT Retail IoT - Come le IoT influenzano il mercato del Retailriot-markets
 

Destaque (20)

DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScript
 
Sistemi di messaging 19 01-2016
Sistemi di messaging 19 01-2016Sistemi di messaging 19 01-2016
Sistemi di messaging 19 01-2016
 
Milano Smart City
Milano Smart CityMilano Smart City
Milano Smart City
 
Slide openvsclosed-source
Slide openvsclosed-sourceSlide openvsclosed-source
Slide openvsclosed-source
 
Digital Marketing: come avere visibilità sul web
Digital Marketing: come avere visibilità sul webDigital Marketing: come avere visibilità sul web
Digital Marketing: come avere visibilità sul web
 
Diritto all'oblio - Internet Archive
Diritto all'oblio - Internet ArchiveDiritto all'oblio - Internet Archive
Diritto all'oblio - Internet Archive
 
Questione di Feedback
Questione di FeedbackQuestione di Feedback
Questione di Feedback
 
Geolocalizzazione: vantaggi e svantaggi
Geolocalizzazione: vantaggi e svantaggiGeolocalizzazione: vantaggi e svantaggi
Geolocalizzazione: vantaggi e svantaggi
 
Web Advertising
Web AdvertisingWeb Advertising
Web Advertising
 
Font analysis
Font analysisFont analysis
Font analysis
 
Named data networking
Named data networkingNamed data networking
Named data networking
 
Web tv
Web tvWeb tv
Web tv
 
E-Commerce
E-CommerceE-Commerce
E-Commerce
 
17 - Web feed e aggregatori
17 - Web feed e aggregatori17 - Web feed e aggregatori
17 - Web feed e aggregatori
 
16 - Social media
16 - Social media16 - Social media
16 - Social media
 
19 - Wiki, Wikipedia e Open Internet
19 - Wiki, Wikipedia e Open Internet19 - Wiki, Wikipedia e Open Internet
19 - Wiki, Wikipedia e Open Internet
 
14 - I blog
14 - I blog14 - I blog
14 - I blog
 
15 - La forma breve e il microblogging
15 - La forma breve e il microblogging15 - La forma breve e il microblogging
15 - La forma breve e il microblogging
 
18 - Content sharing sites
18 - Content sharing sites18 - Content sharing sites
18 - Content sharing sites
 
R-IoT Retail IoT - Come le IoT influenzano il mercato del Retail
R-IoT Retail IoT - Come le IoT influenzano il mercato del RetailR-IoT Retail IoT - Come le IoT influenzano il mercato del Retail
R-IoT Retail IoT - Come le IoT influenzano il mercato del Retail
 

Semelhante a Introduzione a JavaScript e jQuery (1/2)

Introduzione a TypeScript
Introduzione a TypeScriptIntroduzione a TypeScript
Introduzione a TypeScriptSinergia Totale
 
Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Codemotion
 
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLDTYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLDDotNetCampus
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campusDotNetCampus
 
Antica presentazione AJAX
Antica presentazione AJAXAntica presentazione AJAX
Antica presentazione AJAXTommaso Torti
 
Javascript - 1 | WebMaster & WebDesigner
Javascript - 1 | WebMaster & WebDesignerJavascript - 1 | WebMaster & WebDesigner
Javascript - 1 | WebMaster & WebDesignerMatteo Magni
 
Cert03 70-486 developing asp.net mvc 4 web applications
Cert03   70-486 developing asp.net mvc 4 web applicationsCert03   70-486 developing asp.net mvc 4 web applications
Cert03 70-486 developing asp.net mvc 4 web applicationsDotNetCampus
 
SUE AGILE Framework (Italiano)
SUE AGILE Framework (Italiano)SUE AGILE Framework (Italiano)
SUE AGILE Framework (Italiano)Sabino Labarile
 
Javascript - 1 | WebMaster & WebDesigner
Javascript - 1 | WebMaster & WebDesignerJavascript - 1 | WebMaster & WebDesigner
Javascript - 1 | WebMaster & WebDesignerMatteo Magni
 
Studio e sviluppo di un sito web responsive attraverso Bootstrap
Studio e sviluppo di un sito web responsive attraverso BootstrapStudio e sviluppo di un sito web responsive attraverso Bootstrap
Studio e sviluppo di un sito web responsive attraverso BootstrapDavide Polotto
 
Sviluppo web con Ruby on Rails
Sviluppo web con Ruby on RailsSviluppo web con Ruby on Rails
Sviluppo web con Ruby on Railsjekil
 
Single Page Applications
Single Page ApplicationsSingle Page Applications
Single Page ApplicationsRoberto Messora
 
Introduzione a Ruby On Rails
Introduzione a Ruby On RailsIntroduzione a Ruby On Rails
Introduzione a Ruby On RailsLuca Mearelli
 
Code quality e test automatizzati con JavaScript
Code quality e test automatizzati con JavaScriptCode quality e test automatizzati con JavaScript
Code quality e test automatizzati con JavaScriptRoberto Messora
 
Presentazione Corso - Parte 3
Presentazione Corso - Parte 3Presentazione Corso - Parte 3
Presentazione Corso - Parte 3Giorgio Carpoca
 

Semelhante a Introduzione a JavaScript e jQuery (1/2) (20)

Introduzione a TypeScript
Introduzione a TypeScriptIntroduzione a TypeScript
Introduzione a TypeScript
 
Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015
 
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLDTYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campus
 
Antica presentazione AJAX
Antica presentazione AJAXAntica presentazione AJAX
Antica presentazione AJAX
 
Javascript - 1 | WebMaster & WebDesigner
Javascript - 1 | WebMaster & WebDesignerJavascript - 1 | WebMaster & WebDesigner
Javascript - 1 | WebMaster & WebDesigner
 
Link. javascript ajax
  Link. javascript ajax  Link. javascript ajax
Link. javascript ajax
 
Cert03 70-486 developing asp.net mvc 4 web applications
Cert03   70-486 developing asp.net mvc 4 web applicationsCert03   70-486 developing asp.net mvc 4 web applications
Cert03 70-486 developing asp.net mvc 4 web applications
 
SUE AGILE Framework (Italiano)
SUE AGILE Framework (Italiano)SUE AGILE Framework (Italiano)
SUE AGILE Framework (Italiano)
 
Javascript - 1 | WebMaster & WebDesigner
Javascript - 1 | WebMaster & WebDesignerJavascript - 1 | WebMaster & WebDesigner
Javascript - 1 | WebMaster & WebDesigner
 
Studio e sviluppo di un sito web responsive attraverso Bootstrap
Studio e sviluppo di un sito web responsive attraverso BootstrapStudio e sviluppo di un sito web responsive attraverso Bootstrap
Studio e sviluppo di un sito web responsive attraverso Bootstrap
 
Corso Javascript
Corso JavascriptCorso Javascript
Corso Javascript
 
Sviluppo web con Ruby on Rails
Sviluppo web con Ruby on RailsSviluppo web con Ruby on Rails
Sviluppo web con Ruby on Rails
 
Presentazione tirocinio
Presentazione tirocinio Presentazione tirocinio
Presentazione tirocinio
 
Single Page Applications
Single Page ApplicationsSingle Page Applications
Single Page Applications
 
Introduzione a Ruby On Rails
Introduzione a Ruby On RailsIntroduzione a Ruby On Rails
Introduzione a Ruby On Rails
 
Dominopoint meet the experts 2015 - XPages
Dominopoint   meet the experts 2015 - XPagesDominopoint   meet the experts 2015 - XPages
Dominopoint meet the experts 2015 - XPages
 
Code quality e test automatizzati con JavaScript
Code quality e test automatizzati con JavaScriptCode quality e test automatizzati con JavaScript
Code quality e test automatizzati con JavaScript
 
Rich Internet Application
Rich Internet ApplicationRich Internet Application
Rich Internet Application
 
Presentazione Corso - Parte 3
Presentazione Corso - Parte 3Presentazione Corso - Parte 3
Presentazione Corso - Parte 3
 

Mais de Giuseppe Vizzari

Presentazione CdLM in Teoria e Tecnologia della Comunicazione A.A. 2020/21
Presentazione CdLM in Teoria e Tecnologia della Comunicazione A.A. 2020/21Presentazione CdLM in Teoria e Tecnologia della Comunicazione A.A. 2020/21
Presentazione CdLM in Teoria e Tecnologia della Comunicazione A.A. 2020/21Giuseppe Vizzari
 
14 - Web designer vs Web developer ...
14 - Web designer vs Web developer ... 14 - Web designer vs Web developer ...
14 - Web designer vs Web developer ... Giuseppe Vizzari
 
11 - Evoluzione del Web (19/20)
11 - Evoluzione del Web (19/20)11 - Evoluzione del Web (19/20)
11 - Evoluzione del Web (19/20)Giuseppe Vizzari
 
10 - Modelli di business nel Web (19/20)
10 - Modelli di business nel Web (19/20)10 - Modelli di business nel Web (19/20)
10 - Modelli di business nel Web (19/20)Giuseppe Vizzari
 
4 - Introduzione al Web (1/2)
4 - Introduzione al Web (1/2)4 - Introduzione al Web (1/2)
4 - Introduzione al Web (1/2)Giuseppe Vizzari
 
3 - Introduzione a Internet (2/2)
3 - Introduzione a Internet (2/2)3 - Introduzione a Internet (2/2)
3 - Introduzione a Internet (2/2)Giuseppe Vizzari
 
2 - Introduzione ad Internet (1/2)
2 - Introduzione ad Internet (1/2)2 - Introduzione ad Internet (1/2)
2 - Introduzione ad Internet (1/2)Giuseppe Vizzari
 
1 - Introduzione al corso 19/20
1 - Introduzione al corso 19/201 - Introduzione al corso 19/20
1 - Introduzione al corso 19/20Giuseppe Vizzari
 
Intelligenza Artificiale e Realtà Virtuale
Intelligenza Artificiale e Realtà VirtualeIntelligenza Artificiale e Realtà Virtuale
Intelligenza Artificiale e Realtà VirtualeGiuseppe Vizzari
 
Modelli di business nel web
Modelli di business nel webModelli di business nel web
Modelli di business nel webGiuseppe Vizzari
 
Introduzione al web (1/2) - 18/19
Introduzione al web (1/2) - 18/19Introduzione al web (1/2) - 18/19
Introduzione al web (1/2) - 18/19Giuseppe Vizzari
 
Introduzione a Internet (2/2) - 18/19
Introduzione a Internet (2/2) - 18/19Introduzione a Internet (2/2) - 18/19
Introduzione a Internet (2/2) - 18/19Giuseppe Vizzari
 

Mais de Giuseppe Vizzari (19)

Presentazione CdLM in Teoria e Tecnologia della Comunicazione A.A. 2020/21
Presentazione CdLM in Teoria e Tecnologia della Comunicazione A.A. 2020/21Presentazione CdLM in Teoria e Tecnologia della Comunicazione A.A. 2020/21
Presentazione CdLM in Teoria e Tecnologia della Comunicazione A.A. 2020/21
 
14 - Web designer vs Web developer ...
14 - Web designer vs Web developer ... 14 - Web designer vs Web developer ...
14 - Web designer vs Web developer ...
 
12 - Social media (19/20)
12 - Social media (19/20)12 - Social media (19/20)
12 - Social media (19/20)
 
11 - Evoluzione del Web (19/20)
11 - Evoluzione del Web (19/20)11 - Evoluzione del Web (19/20)
11 - Evoluzione del Web (19/20)
 
10 - Modelli di business nel Web (19/20)
10 - Modelli di business nel Web (19/20)10 - Modelli di business nel Web (19/20)
10 - Modelli di business nel Web (19/20)
 
7 - Web application e CMS
7 - Web application e CMS7 - Web application e CMS
7 - Web application e CMS
 
4 - Introduzione al Web (1/2)
4 - Introduzione al Web (1/2)4 - Introduzione al Web (1/2)
4 - Introduzione al Web (1/2)
 
3 - Introduzione a Internet (2/2)
3 - Introduzione a Internet (2/2)3 - Introduzione a Internet (2/2)
3 - Introduzione a Internet (2/2)
 
2 - Introduzione ad Internet (1/2)
2 - Introduzione ad Internet (1/2)2 - Introduzione ad Internet (1/2)
2 - Introduzione ad Internet (1/2)
 
1 - Introduzione al corso 19/20
1 - Introduzione al corso 19/201 - Introduzione al corso 19/20
1 - Introduzione al corso 19/20
 
Intelligenza Artificiale e Realtà Virtuale
Intelligenza Artificiale e Realtà VirtualeIntelligenza Artificiale e Realtà Virtuale
Intelligenza Artificiale e Realtà Virtuale
 
Wiki e open internet
Wiki e open internetWiki e open internet
Wiki e open internet
 
Web feed e aggregatori
Web feed e aggregatoriWeb feed e aggregatori
Web feed e aggregatori
 
I social media
I social mediaI social media
I social media
 
Evoluzione del web
Evoluzione del webEvoluzione del web
Evoluzione del web
 
Modelli di business nel web
Modelli di business nel webModelli di business nel web
Modelli di business nel web
 
Ricercare nel web
Ricercare nel webRicercare nel web
Ricercare nel web
 
Introduzione al web (1/2) - 18/19
Introduzione al web (1/2) - 18/19Introduzione al web (1/2) - 18/19
Introduzione al web (1/2) - 18/19
 
Introduzione a Internet (2/2) - 18/19
Introduzione a Internet (2/2) - 18/19Introduzione a Internet (2/2) - 18/19
Introduzione a Internet (2/2) - 18/19
 

Último

Le forme allotropiche del C-Palestini e Pancia.docx
Le forme allotropiche del C-Palestini e Pancia.docxLe forme allotropiche del C-Palestini e Pancia.docx
Le forme allotropiche del C-Palestini e Pancia.docxpalestiniaurora
 
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...Nguyen Thanh Tu Collection
 
Piccole Personetestoitaliano-AuroraPalestini.docx
Piccole Personetestoitaliano-AuroraPalestini.docxPiccole Personetestoitaliano-AuroraPalestini.docx
Piccole Personetestoitaliano-AuroraPalestini.docxpalestiniaurora
 
TeccarelliLorenzo-i4stilidellapitturaromana.docx
TeccarelliLorenzo-i4stilidellapitturaromana.docxTeccarelliLorenzo-i4stilidellapitturaromana.docx
TeccarelliLorenzo-i4stilidellapitturaromana.docxteccarellilorenzo
 
PalestiniAurora-la conoscenzatestoita.docx
PalestiniAurora-la conoscenzatestoita.docxPalestiniAurora-la conoscenzatestoita.docx
PalestiniAurora-la conoscenzatestoita.docxpalestiniaurora
 
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptxTeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptxteccarellilorenzo
 
presentazione varietà allotropiche del carbonio.pptx
presentazione varietà allotropiche del carbonio.pptxpresentazione varietà allotropiche del carbonio.pptx
presentazione varietà allotropiche del carbonio.pptxmichelacaporale12345
 
Storia-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptxStoria-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptxteccarellilorenzo
 
Pancia Asia-La vita di Steve Jobs-Adriano Olivetti-Bill Gates.pptx
Pancia Asia-La vita di Steve Jobs-Adriano Olivetti-Bill Gates.pptxPancia Asia-La vita di Steve Jobs-Adriano Olivetti-Bill Gates.pptx
Pancia Asia-La vita di Steve Jobs-Adriano Olivetti-Bill Gates.pptxpalestiniaurora
 
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024IISGiovanniVallePado
 
Pancia Asia-Pelusi Sara-La pittura romana - Copia (1).pptx
Pancia Asia-Pelusi Sara-La pittura romana - Copia (1).pptxPancia Asia-Pelusi Sara-La pittura romana - Copia (1).pptx
Pancia Asia-Pelusi Sara-La pittura romana - Copia (1).pptxpalestiniaurora
 
Educazione civica-Asia Pancia powerpoint
Educazione civica-Asia Pancia powerpointEducazione civica-Asia Pancia powerpoint
Educazione civica-Asia Pancia powerpointpalestiniaurora
 
Pancia Asia_relazione laboratorio(forza d'attrito).docx
Pancia Asia_relazione laboratorio(forza d'attrito).docxPancia Asia_relazione laboratorio(forza d'attrito).docx
Pancia Asia_relazione laboratorio(forza d'attrito).docxpalestiniaurora
 
TeccarelliLorenzo-Mitodella.cavernaa.pdf
TeccarelliLorenzo-Mitodella.cavernaa.pdfTeccarelliLorenzo-Mitodella.cavernaa.pdf
TeccarelliLorenzo-Mitodella.cavernaa.pdfteccarellilorenzo
 
Presentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticaPresentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticanico07fusco
 
Palestini Aurora-Steve Jobs,Olivetti e Gates.pptx
Palestini Aurora-Steve Jobs,Olivetti e Gates.pptxPalestini Aurora-Steve Jobs,Olivetti e Gates.pptx
Palestini Aurora-Steve Jobs,Olivetti e Gates.pptxpalestiniaurora
 
a scuola di biblioVerifica: come utilizzare il test TRAAP
a scuola di biblioVerifica: come utilizzare il test TRAAPa scuola di biblioVerifica: come utilizzare il test TRAAP
a scuola di biblioVerifica: come utilizzare il test TRAAPDamiano Orru
 
Gli isotopi scienze naturale seconda pres
Gli isotopi scienze naturale seconda presGli isotopi scienze naturale seconda pres
Gli isotopi scienze naturale seconda prespalestiniaurora
 
Una breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opereUna breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opereMarco Chizzali
 
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptxAdducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptxsasaselvatico
 

Último (20)

Le forme allotropiche del C-Palestini e Pancia.docx
Le forme allotropiche del C-Palestini e Pancia.docxLe forme allotropiche del C-Palestini e Pancia.docx
Le forme allotropiche del C-Palestini e Pancia.docx
 
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
 
Piccole Personetestoitaliano-AuroraPalestini.docx
Piccole Personetestoitaliano-AuroraPalestini.docxPiccole Personetestoitaliano-AuroraPalestini.docx
Piccole Personetestoitaliano-AuroraPalestini.docx
 
TeccarelliLorenzo-i4stilidellapitturaromana.docx
TeccarelliLorenzo-i4stilidellapitturaromana.docxTeccarelliLorenzo-i4stilidellapitturaromana.docx
TeccarelliLorenzo-i4stilidellapitturaromana.docx
 
PalestiniAurora-la conoscenzatestoita.docx
PalestiniAurora-la conoscenzatestoita.docxPalestiniAurora-la conoscenzatestoita.docx
PalestiniAurora-la conoscenzatestoita.docx
 
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptxTeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
 
presentazione varietà allotropiche del carbonio.pptx
presentazione varietà allotropiche del carbonio.pptxpresentazione varietà allotropiche del carbonio.pptx
presentazione varietà allotropiche del carbonio.pptx
 
Storia-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptxStoria-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptx
 
Pancia Asia-La vita di Steve Jobs-Adriano Olivetti-Bill Gates.pptx
Pancia Asia-La vita di Steve Jobs-Adriano Olivetti-Bill Gates.pptxPancia Asia-La vita di Steve Jobs-Adriano Olivetti-Bill Gates.pptx
Pancia Asia-La vita di Steve Jobs-Adriano Olivetti-Bill Gates.pptx
 
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
 
Pancia Asia-Pelusi Sara-La pittura romana - Copia (1).pptx
Pancia Asia-Pelusi Sara-La pittura romana - Copia (1).pptxPancia Asia-Pelusi Sara-La pittura romana - Copia (1).pptx
Pancia Asia-Pelusi Sara-La pittura romana - Copia (1).pptx
 
Educazione civica-Asia Pancia powerpoint
Educazione civica-Asia Pancia powerpointEducazione civica-Asia Pancia powerpoint
Educazione civica-Asia Pancia powerpoint
 
Pancia Asia_relazione laboratorio(forza d'attrito).docx
Pancia Asia_relazione laboratorio(forza d'attrito).docxPancia Asia_relazione laboratorio(forza d'attrito).docx
Pancia Asia_relazione laboratorio(forza d'attrito).docx
 
TeccarelliLorenzo-Mitodella.cavernaa.pdf
TeccarelliLorenzo-Mitodella.cavernaa.pdfTeccarelliLorenzo-Mitodella.cavernaa.pdf
TeccarelliLorenzo-Mitodella.cavernaa.pdf
 
Presentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticaPresentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informatica
 
Palestini Aurora-Steve Jobs,Olivetti e Gates.pptx
Palestini Aurora-Steve Jobs,Olivetti e Gates.pptxPalestini Aurora-Steve Jobs,Olivetti e Gates.pptx
Palestini Aurora-Steve Jobs,Olivetti e Gates.pptx
 
a scuola di biblioVerifica: come utilizzare il test TRAAP
a scuola di biblioVerifica: come utilizzare il test TRAAPa scuola di biblioVerifica: come utilizzare il test TRAAP
a scuola di biblioVerifica: come utilizzare il test TRAAP
 
Gli isotopi scienze naturale seconda pres
Gli isotopi scienze naturale seconda presGli isotopi scienze naturale seconda pres
Gli isotopi scienze naturale seconda pres
 
Una breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opereUna breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opere
 
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptxAdducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
 

Introduzione a JavaScript e jQuery (1/2)

  • 1. Esercitazioni di Sistemi Distribuiti 2014/2015 Javascript e jQuery 1 Giuseppe Vizzari
  • 2. Outline • Concetti base – Markup vs programmazione, scripting, client-side, AJAX... • Un 'crash course' di JavaScript – Variabili – Array – Strutture di controllo del flusso – Funzioni • Introduzione a jQuery ‘by example’ – Selezione e modifica di elementi di una pagina – Gestione di eventi A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 2
  • 3. Outline • Concetti base – Markup vs programmazione, scripting, client-side, AJAX... • Un 'crash course' di JavaScript – Variabili – Array – Strutture di controllo del flusso – Funzioni • Introduzione a jQuery ‘by example’ – Selezione e modifica di elementi di una pagina – Gestione di eventi A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 3
  • 4. Markup vs Programmazione • Linguaggio di programmazione: utilizzato per comunicare istruzioni a una macchina di calcolo, per definire programmi che controllino il comportamento di un calcolatore • Linguaggio di markup: utilizzato per annotare un documento in modo tale che l'annotazione sia sintatticamente distinguibile dal testo • Esempi di linguaggi di markup: – TeX (e LaTeX) – SGML – HTML, XHTML, XML • Le annotazioni possono avere diverse finalità: – di presentazione (definiscono come visualizzare il testo al quale sono associate) – procedurali (definiscono istruzioni per programmi che elaborino il testo al quale sono associate) – descrittive (etichettano semplicemente parti del testo, disaccoppiando la struttura dalla presentazione del testo stesso) A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 4
  • 5. Linguaggi di Scripting • Linguaggio di programmazione per l'automazione di compiti altrimenti eseguibili da un utente umano all'interno di un ambiente software • Variano da linguaggi molto specifici per applicazioni e domini ristretti (e.g. MAXScript per 3ds Max), a linguaggi general purpose (e.g. Python) • Caratteristiche tipiche: – Semplicità ma... – Specificità, orientamento a funzionalità limitate – Interpretati, raramente compilati, spesso molto dinamici • Curiosità – Lisp (nella sua variante AutoLISP) è incluso nelle versioni complete di AutoCAD A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 5
  • 6. JavaScript • JavaScript è un linguaggio di programmazione interpretato inizialmente progettato per permettere l'esecuzione di script all'interno di browser web, lato client, per l'interazione con l'utente, la validazione di dati all'interno di form, la modifica di documenti web senza effetto 'pagina bianca', ... • JavaScript è dinamico, debolmente tipizzato, la cui sintassi è stata influenzata dal C e da Java • Non analizzeremo il linguaggio ad un livello di dettaglio analogo rispetto a quello che avete visto per Java nei vari corsi di programmazione... • ... vedremo, tramite esempi concreti, come può essere utilizzato per costruire pagine web dinamiche, capaci di riutilizzare servizi web resi disponibili da terze parti, componendo – più che programmando – applicazioni web A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 6
  • 7. Lato client • JavaScript è (di norma) eseguito ‘lato client’ • Nel mondo web una serie di tecnologie (non ultime le servlet e JSP, ma anche PHP, Ruby on Rails) rappresentano tecnologie ‘lato server’ – Nella tipica architettura a 3 tier le tecnologie lato server realizzano gran parte delle logiche applicative e accesso ai dati (logic e data tier) • Altre tecnologie ‘lato client’ sono ad esempio Flash, le Applet di Java A.A. 2013/2014 Esercitazioni di Sistemi Distribuiti 7 http://en.wikipedia.org/wiki/Multitier_architecture
  • 8. Outline • Concetti base – Markup vs programmazione, scripting, client-side, AJAX... • Un 'crash course' di JavaScript – Variabili – Array – Strutture di controllo del flusso – Funzioni • Introduzione a JQuery ‘by example’ – Selezione e modifica di elementi di una pagina – Gestione di eventi A.A. 2013/2014 Esercitazioni di Sistemi Distribuiti 8
  • 9. Testo consigliato • Gli esercizi che verranno proposti sono tratti dal testo JavaScript & jQuery: The Missing Manual di David Sawyer McFarland, ed. O'Reilly • Gli esercizi e tutti file necessari per il loro svolgimento sono scaricabili da http://sawmac.com/js2e/ • Il libro tratta più temi rispetto a quelli che verranno discussi a lezione e lo fa in modo più approfondito • Ulteriori risorse utili per approfondimento e documentazione sono disponibili gratuitamente in rete, ad esempio: – JavaScript in generale: http://www.quirksmode.org/js/contents.html http://eloquentjavascript.net – jQuery: http://docs.jquery.com/Tutorials http://www.w3schools.com/jquery/default.asp A.A. 2013/2014 Esercitazioni di Sistemi Distribuiti 9
  • 10. L'inevitabile 'Hello world!' (1) <!doctype html> <html> <head> <meta charset="UTF-8"> <title>Hello World</title> <link href="../_css/site.css" rel="stylesheet"> <script> alert('hello world'); </script> </head> <body> <div class="wrapper"> <div class="header”> [...] </div> <div class="content”> [...] </div> <div class="aside"> </div> </div> <div class="footer”> [...] </div> </div> </body> </html> A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 10
  • 11. L'inevitabile 'Hello world!' (2) <!doctype html> <html> <head> <meta charset="UTF-8"> <title>Hello World</title> <link href="../_css/site.css" rel="stylesheet"> </head> <body> <div class="wrapper"> <div class="header”> [...] </div> <div class="content"> <div class="main"> <h1>Writing to the Document Window</h1> <script> document.write('<p>Hello world!</p>'); </script> </div> <div class="aside"> </div> </div> <div class="footer”> [...] </div> </div> </body> </html> A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 11
  • 12. Debugging – la console degli errori <!doctype html> <html> <head> <meta charset="UTF-8"> <title>Hello World</title> <link href="../_css/site.css" rel="stylesheet"> <script src="../_js/jquery-1.7.2.min.js"></script> <script> $(document).ready(function() { $('body').hide().fadeIn('slow); }); </script> </head> <body> <div class="wrapper"> <div class="header”> [...] </div> <div class="content”> [...] </div> <div class="aside"> </div> </div> <div class="footer”> [...] </div> </div> </body> </html> A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 12
  • 13. Debugging – la console degli errori A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 13
  • 14. Variabili (1) <div class="content"> <div class="main"> <h1>Using a Variable</h1> <script> var firstName = 'Cookie'; var lastName = 'Monster'; //var lastName = 'Jar'; document.write('<p>'); document.write(firstName + ' ' + lastName); document.write('</p>'); </script> </div> </div> A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 14
  • 15. Variabili (2) <!DOCTYPE html> <html> <head> [...] <script> var name = prompt('What is your name?', ''); </script> </head> <body> <div class="wrapper"> <div class="header”> [...] </div> <div class="content"> <div class="main"> <h1>Using a Variable, Part II</h1> <script> document.write('<p>Welcome ' + name + '</p>'); </script> </div> </div> A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 15
  • 16. Variabili e operatori – approfondimento (1) • Variabili non tipizzate, “tipo” dinamico var lastName = 'Monster'; lastName = 3; // No problem, here... • Attenzione alla semantica degli operatori, dipendente dal contenuto delle variabili... var numshoes = '2'; var numsocks = 4; document.write('<p>' + numshoes + numsocks + '</p>') document.write('<p>'); document.write(+ numshoes + numsocks); document.write('</p>'); • Operatori matematici di Java consueti var numsocks = 4; var numshoes = 2; numsocks = (numsocks/2) + numshoes; numsocks += --numshoes; numshoes /= 2; A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 16
  • 17. Variabili e operatori – approfondimento (2) • Attenzione agli operatori di comparazione i noti == e !=, ma anche === e !== • I primi due, qualora le espressioni confrontate non siano dello stesso tipo, cercano di effettuare una conversione, quindi possono generare effetti sorprendenti ed errori • Esempi: – 0 == '0' ma 0 !== '0’ • In generale alcuni programmatori esperti (ad es. Douglas Crockford, JavaScript architect di Yahoo) suggeriscono di usare la versione che non effettua la conversione di tipo A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 17
  • 18. Array (1) <div class="content"> <div class="main"> <h1>Creating and Using Arrays</h1> <script> var authors = [ 'Ernest Hemingway', 'Charlotte Bronte', 'Dante Alighieri', 'Emily Dickinson' ]; document.write('<p>The first author is <strong>'); document.write(authors[0] + '</strong></p>'); document.write('<p>The last author is <strong>'); document.write(authors[authors.length-1] + '</strong></p>'); authors.unshift('Stan Lee'); document.write('<p>I almost forgot <strong>'); document.write(authors[0]); document.write('</strong></p>'); authors.push('Umberto Eco'); document.write('<p>And finally... <strong>'); document.write(authors[authors.length-1]); document.write('</strong></p>'); </script> </div> </div> A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 18
  • 19. Array (2) A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 19
  • 20. Array - approfondimento • Sintassi analoga a Java ma nessuna necessità di inizializzazione • Attributo length, elementi dalla posizione 0 a length-1 • Natura essenzialmente dinamica authors.push('Umberto Eco'); equivale a authors[length]='Umberto Eco’; • Funzioni varie di utilità, passaggio da array di stringhe a stringhe e viceversa... var myarr = ["Mack", "the", "Knife"]; document.write("<p>myarr: " + myarr + " </p>"); var flattened = myarr.join(" "); document.write("<p>flattened: " + flattened + " </p>"); var newarr = flattened.split(" "); document.write("<p>myarr: " + newarr + " </p>"); A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 20
  • 21. Strutture dati generalizzate <div class="content"> <div class="main"> <h1>Using Conditional Statements</h1> <script> var myauthor = {name: 'Ernest Hemingway', "born": 1899, died: 1961 }; document.write('<p>The author's name is <strong>'); document.write(myauthor.name + '</strong></p>'); document.write('<p>He was born in <strong>'); document.write(myauthor["born"] + '</strong></p>'); document.write('<p>He died in <strong>'); document.write(myauthor.died + '</strong></p>'); delete myauthor.died; myauthor.death=1961; document.write('<p>This is another field <strong>' + myauthor.death); document.write('</strong></p>'); if(myauthor.died === undefined) document.write('<p>The previous one is now undefined.</p>'); </script> </div> </div> A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 21
  • 22. Strutture dati generalizzate - approfondimento • Oggetti JavaScript usabili per rappresentare record e strutture composite • Delimitatori parentesi graffe, struttura interna basata su property var mailArchive = {0: "Dear nephew, ... (mail number 1)", 1: "(mail number 2)", 2: "(mail number 3)"}; for (var current = 0; current in mailArchive; current++) { print("Processing e-mail #” + current); print(": ” + mailArchive[current]); } • Strutture dinamiche, non “tipizzate” var cat = {colour: "grey", name: "Spot", size: 46}; cat.size = 47; delete cat.size; // Now (cat.size == undefined) cat.weight = 5.5; • Attenzione null e undefined sono oggetti veri e propri, il primo rappresenta una variabile definita ma con valore ‘vuoto’, la seconda un variabile non definita; inoltre: – null == undefined ma null !== undefined A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 22
  • 23. Controllo di flusso (1) <div class="content"> <div class="main"> <h1>Using Conditional Statements</h1> <script> do { var luckyNumber = prompt('What is your lucky number?',''); luckyNumber = parseInt(luckyNumber, 10); } while (isNaN(luckyNumber)); if (luckyNumber == 7 ) { document.write("<p>Hey, 7 is my lucky number too!</p>"); } else if (luckyNumber == 13 || luckyNumber == 24) { document.write("<p>Wooh. " + luckyNumber); document.write("? That's an unlucky number!</p>"); } else { document.write("<p>The number " + luckyNumber); document.write(“is lucky for you!</p>"); } </script> </div> </div> A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 23
  • 24. Controllo di flusso - approfondimento • Strutture di selezione - if if (cond1){ // door #1 } else if (cond2){ // door #2 } else { // door #3 } • Strutture di selezione – switch switch(var){ case 'val1': // door #1 break; case 'val2': // door #2 break; default: // door #3 } • Strutture di iterazione – while while(cond){ // code to iterate } • Strutture di iterazione – do while do { // code to iterate } while(cond); • Strutture di iterazione – for for(init; cond; step){ // code to iterate } A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 24
  • 25. Controllo di flusso e funzioni <div class="content"> <div class="main"> <h1>A Simple Quiz</h1> <script> var score=0; var questions = [ ['How many moons does Earth have?', 1], ['How many moons does Saturn have?',31], ['How many moons does Venus have?', 0] ]; function askQuestion(question) { var answer = prompt(question[0],''); if (answer == question[1]) { alert('Correct!'); score++; } else { alert('Sorry. The correct answer is ' + question[1]); } } for (var i=0; i<questions.length; i++) { askQuestion(questions[i]); } var message = 'You got ' + score; message += ' out of ' + questions.length; message += ' questions correct.'; document.write('<p>' + message + '</p>'); </script> </div> </div> A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 25
  • 26. Funzioni e scoping <div class="content"> <div class="main"> <h1>Scoping...</h1> <script> var message = 'Global variable...'; function warningA() { var message = 'Local variable...'; alert(message); } function warningB() { alert(message); } warningA(); warningB(); alert(message); </script> </div> </div> A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 26
  • 27. Outline • Concetti base – Markup vs programmazione, scripting, client-side, AJAX... • Un 'crash course' di JavaScript – Variabili – Array – Strutture di controllo del flusso – Funzioni • Introduzione a jQuery ‘by example’ – Selezione e modifica di elementi di una pagina – Gestione di eventi A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 27
  • 28. jQuery in breve... • jQuery è un framework JavaScript che rende molto semplice la scrittura di applicazioni web offrendo funzionalità quali – manipolazione di HTML/DOM e CSS – metodi per eventi HTML – effetti e animazioni – supporto a programmazione AJAX – varie altre utilità (anche tramite plugin) • Abbiamo scelto jQuery per il corso perché è – diffuso, testato e manutenuto (utilizzato in siti come Dell, Digg, NBC e da Google in alcuni progetti; è incluso in WordPress; ...) – open source – compatto (meno di 100kb, se compresso) – può essere esteso con una serie di plugin di vario genere A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 28
  • 29. Selezione e modifica elementi di una pagina (1) A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 29
  • 30. Selezione e modifica elementi di una pagina (2) <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Using Functions</title> <link href="../_css/site.css" rel="stylesheet"> </head> <body> <div class="header”> [...] </div> <div class="content"> <div class="main"> <h1>Auto-Pull Quotes</h1> <h2>Vestibulum semper</h2> <p>Vestibulum semper [...] <span class="pq">Vivamus justo mi, aliquam vitae, eleifend et, lobortis quis, eros.</span> [...] </p> <h2>Morbi dictum</h2> <p>Donec at sapien [...] <span class="pq">Etiam mattis. Donec sed diam nec odio molestie iaculis.</span> [...] </p> <h2>Praesent sed est</h2> <p>Praesent sed est ac metus facilisis [...] </p> <p>Integer lacus. [...] </p> </div> </div> <div class="footer”> [...] </div> </body> </html> A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 30
  • 31. Selezione e modifica elementi di una pagina (3) A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 31
  • 32. Selezione e modifica elementi di una pagina (4) A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 32
  • 33. Selezione e modifica elementi di una pagina (5) <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Using Functions</title> <link href="../_css/site.css" rel="stylesheet"> <style> .pullquote { float: right; clear: right; width: 200px; border: 1px solid black; padding: 10px; font-size: 20px; background-color:rgb(195,151,51); margin: 20px 0 10px 10px; font-style: italic; color: rgb(255,255,255); } </style> A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 33
  • 34. Selezione e modifica elementi di una pagina (6) <head> [...] <script src="../_js/jquery-1.7.2.min.js"></script> <script> $(document).ready(function() { $('span.pq').each(function() { var quote=$(this).clone(); quote.removeClass('pq'); quote.addClass('pullquote'); $(this).before(quote); }); // end each }); // end ready </script> </head> A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 34
  • 35. Elementi base di jQuery (1) • La sintassi di jQuery è specificamente orientata a permettere una rapida e semplice selezione di elementi del documento HTML • La sintassi base di un comando jQuery è $(selector).action() – Il $ definisce l’accesso a funzionalità offerte da jQuery – selector viene utilizzato per specificare una sorta di query per selezionare una parte del documento HTML – action specifica un’azione da effettuare sull’elemento stesso • La porzione $(document).ready(function() { [...] }); // end ready indica che vogliamo effettuare l’azione ready sull’oggetto document passando come parametro una funzione anonima, specificata per esteso • L’azione ready specifica che il parametro ricevuto, una funzione, va richiamata non appena il documento è ‘pronto’, ovvero è stato completamente caricato A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 35
  • 36. Elementi base di jQuery (2) • Quello che vorremmo fare, nel nostro esempio, è selezionare le porzioni di documento negli span di classe pq, clonarli dandogli al contempo lo stile desiderato • Il selettore per individuare tutti gli span di classe pq è $ ('span.pq') • Per iterare su un insieme di elementi jQuery offre la funzione each • La porzione $('span.pq').each(function() { [...] }); // end each permette di specificare una funzione anonima che va applicata ad ogni span di classe pq A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 36
  • 37. Elementi base di jQuery (3) • A questo punto possiamo operare sui singoli span... • In particolare il selettore $(this), trovandoci all’interno di una funzione chiamata (implicitamente) su uno degli span stessi, ci permette di ottenere il riferimento che ci serve • La porzione var quote=$(this).clone(); quote.removeClass('pq'); quote.addClass('pullquote'); $(this).before(quote); permette quindi di – clonare lo span nella variabile quote, – rimuoverne la classe pq, – aggiungerne la classe pullquote, – aggiungere la variabile stessa al documento, appena prima dello span stesso A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 37
  • 38. Gestione di eventi e modifica dinamica di una pagina (1) <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>A One Page Faq</title> <link href="../_css/site.css" rel="stylesheet"> </head> <body> <div class="header"> [...] </div> <div class="content”> <div class="main"> <h1>A One Page FAQ</h1> <h2>I've heard that JavaScript is the long-lost fountain of youth. Is this true?</h2> <div class="answer"> <p>Why, yes it is! Studies prove that learning JavaScript freshens the mind and extends life span by several hundred years. (Note: some scientists disagree with these claims.)</p> </div> <h2>Can JavaScript really solve all of my problems?</h2> <div class="answer”> <p>Why, yes it can! It's the most versatile programming language ever created and is trained to provide financial management advice, life-saving CPR, and even to take care of household pets.</p> </div> <h2>Is there nothing JavaScript <em>can&#8217;t</em> do?</h2> <div class="answer"> <p>Why, no there isn&#8217;t! It&#8217;s even able to write its own public relations- oriented Frequently Asked Questions pages. Now that&#8217;s one smart programming language!</p> </div> </div> </div> <div class="footer"> [...] </div> </div> </body> </html> A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 38
  • 39. Gestione di eventi e modifica dinamica di una pagina (2) A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 39
  • 40. Gestione di eventi e modifica dinamica di una pagina (3) <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>A One Page Faq</title> <link href="../_css/site.css" rel="stylesheet"> <style type="text/css"> h2 { background: url(../_images/open.png) no-repeat 0 11px; padding: 10px 0 0 25px; cursor: pointer; } h2.close { background-image: url(../_images/close.png); } .answer { margin-left: 25px; } </style> A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 40
  • 41. Gestione di eventi e modifica dinamica di una pagina (4) A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 41
  • 42. Gestione di eventi e modifica dinamica di una pagina (5) <script src="../_js/jquery-1.7.2.min.js"></script> <script> $(document).ready(function() { $('.answer').hide(); $('.main h2').toggle( function() { $(this).next('.answer').slideDown(); $(this).addClass('close'); }, function() { $(this).next('.answer').fadeOut(); $(this).removeClass('close'); } ); // end toggle }); // end ready </script> A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 42
  • 43. Ulteriori elementi di base di jQuery • Tramite la tecnica precedentemente illustrata definiamo il da farsi al caricamento della pagina • La porzione di codice $('.answer').hide(); $('.main h2').toggle( [...] } specifica che: – in primis, i div di classe answer devono essere nascosti – in seconda battuta, ai tag h2 che siano figli di un div di classe main, va applicata la funzione toggle [segue...] A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 43
  • 44. Ulteriori elementi di base di jQuery • La funzione toggle permette di associare a un elemento due diverse funzioni, da chiamare rispettivamente per ogni click dispari e pari • In questa porzione di codice $('.main h2').toggle( function() { $(this).next('.answer').slideDown(); $(this).addClass('close'); }, function() { $(this).next('.answer').fadeOut(); $(this).removeClass('close'); } ); // end toggle } si associano due funzioni anonime: – la prima: (i) seleziona il primo div di tipo answer che segue l’oggetto corrente (il tag h2) e vi applica la funzione slideDown, (ii) aggiunge la classe close all’oggetto corrente – la seconda: (i) seleziona il primo div di tipo answer che segue l’oggetto corrente e vi applica la funzione fadeOut, (ii) aggiunge la classe close all’oggetto corrente A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 44
  • 45. Prossima lezione • Ancora jQuery – Approfondimento sulla gestione di eventi – Ulteriori esempi di interfacce dinamiche – Validazione di form – Ajax di base • Un esempio articolato A.A. 2014/2015 Esercitazioni di Sistemi Distribuiti 45

Notas do Editor

  1. Esempio Chapter 1
  2. Esempio Chapter 1
  3. Esempio Chapter 1
  4. Esempio Chapter 1
  5. Esempio Chapter 2
  6. Esempio Chapter 2
  7. Esempio Chapter 2 complete array (pasticciato)
  8. Esempio Chapter 2 complete array (pasticciato)
  9. Esempio Chapter 2 complete array (pasticciato)
  10. Esempio Chapter 2 complete data struct
  11. Esempio Chapter 3 complete conditional
  12. Esempio Chapter 3 complete quiz (pasticciato)
  13. Esempio Chapter 3 complete scoping (pasticciato)
  14. chapter4 pull quotes
  15. chapter 5 faq