SlideShare una empresa de Scribd logo
1 de 58
Descargar para leer sin conexión
Sviluppo applicazioni web e linguaggio HTML

                        LEZIONE 02




JAVASCRIPT
JavaScript?
 E’ un linguaggio di
scripting lato-client,
 interpretato da un
    browser web
A cosa serve?
Rende le nostre pagine
     interattive

         Rispondono alle azioni degli utenti
CLIENT                              SERVER




  Quando l’elaborazione è a carico del server
CLIENT                              SERVER




  Quando l’elaborazione è a carico del client
• Come standard nasce alla fine degli anni 90

                                                                        Standardizzazione del
                                                         Microsoft      linguaggio da parte
                                     Sun Microsystem e   propone 2      dell’ECMA(1)
                                     Java                linguaggi      Nasce ECMAScript
                   Sviluppatori di                       alternativi
   Mosaic: primo   Mosaic                                VBScript e     Adozione e
   browser a       fondano           Netscape            Jscript in     riconoscimento dello
   interfaccia     Netscape          Navigator 2.0 e     Internet       standard da parte
   grafica         Communicatio      JavaScript 1.0      Explorer 3.0   dell’ISO(2)
                   n Corporation




      1992            1994           1995                1996              1997/1998


 (1) ECMA – European Computer Manufacturers Association
 (2) ISO – Internation Organization for Standardization




                                                                Quando è nato?
• Nella pagina HTML dentro un tag <script>:
              <script type=‘text/javascript’>
               …
              </script>       1      Da preferire per mantenere
                                       la separazione tra codice
                  2                    HTML e codice di scripting



Se JavaScript è
coinvolto nella
costruzione del
layout della
pagina




                      Dove scrivo il codice JavaScript?
• In file esterni (file di testo con estensione .js)
   – Per alleggerire la pagina HTML
   – Per utilizzare il codice in più pagine
   – Per ottimizzare il caricamento delle pagine con lo
     stesso codice (il file viene salvato nella cache del
     browser – se attiva)
• Il codice viene reso disponibile nella pagina
  attraverso la seguente sintassi prima della
  fine del tag <head>

  <script type="text/javascript" src=“my_first_jsfile.js"></script>




                Dove scrivo il codice javascript???
Hello World!
…
<script type=‘text/javascript’>
      alert(‘Hello World!’);
</script>
</head>
…
(2)
     Hello World!
…
</head>
<script type=‘text/javascript’>
      document.write(‘Hello World!’);
</script>
…
un po’ di codice …
…
<script type=‘text/javascript’>
  var d = new Date();
  var time = d.getHours();
  if (time < 18) {
     document.write(‘<h1>Buongiorno</h1>’);
  } else {
     document.write(‘<h1>Buonasera</h1>’);
  }
</script>
…
meglio se in una funzione:
…
function greetings() {
  var d = new Date();
  var time = d.getHours();
  if (time < 18) {
     document.write(‘<h1>Buongiorno</h1>’);
  } else {
     document.write(‘<h1>Buonasera</h1>’);
  }
}
…
• Una variabile dichiarata all’interno di una
  funzione ha validità locale per quella
  funzione
• Se dichiaro una variabile esternamente
  questa ha validità globale
• Se non dichiaro la variabile non viene fatta
  distinzione tra locale e globale e assume
  validità su tutta la pagina




                          Ambito delle variabili
• Il DOM descrive come i diversi oggetti di una
  pagina sono collegati tra loro


                            <html>



                   <head>                   <body>


             <title>   <meta>        <ul>            <h1>

                                <li> <li>




                            Document Object Model
DOM
Tutto il contenuto presente in una pagina
HTML è rappresentato da un document
DOM
Tutto il contenuto presente in una pagina
HTML è rappresentato da un document, il
document è costituito da nodi
DOM
Tutto il contenuto presente in una pagina
HTML è rappresentato da un document, il
document è costituito da nodi, ogni tag è
un nodo di tipo element
<span class=“nota”>
                   Struttura di un nodo
              </span>
                                          element



                      span                    text
attribute




                            Struttura di un
            class=“nota”         nodo
proprietà di un nodo
nodeValue                 childNodes
Il valore salvato nel     Insieme dei nodi figli
nodo (eccetto per il      del nodo corrente
tipo element)
                          firstChild
                          Primo nodo figlio del
nodeType
                          nodo corrente
Il tipo di nodo, ovvero
TEXT, ELEMENT o
ATTRIBUTE espresso in     lastChild
numero                    Ultimo nodo figlio del
                          nodo corrente
Il   DOM può
         essere
 manipolato
       con
  JavaScript
       al fine di
    modificare il
contenuto di una
    pagina HTML
<p id=‘ora’>Ore 17:33</p>

1• Recupero l’elemento tramite l’id:


  var d = new Date();
  var el = document.getElementById(‘ora’);
  var text = el.firstChild;
  text.nodeValue = ‘Ore ‘ + d.getHours() + ‘:’ + d.getMinutes();




                   Modificare il testo di un elemento
<p id=‘ora’>Ore 17:33</p>

2• Passo al primo nodo figlio per avere il testo


  var d = new Date();
  var el = document.getElementById(‘ora’);
  var text = el.firstChild;
  text.nodeValue = ‘Ore ‘ + d.getHours() + ‘:’ + d.getMinutes();




                   Modificare il testo di un elemento
<p id=‘ora’>Ore 17:33</p>

3• Assegno tramite la proprietà nodeValue il
  nuovo valore:
  var d = new Date();
  var el = document.getElementById(‘ora’);
  var text = el.firstChild;
  text.nodeValue = ‘Ore ‘ + d.getHours() + ‘:’ + d.getMinutes();




                   Modificare il testo di un elemento
ma
se vogliamo fare le
cose per bene …
<p id=‘ora’>Ore 17:33</p>

2• Rimuovo tutti gli elementi figli del nodo
   corrente
  var d = new Date();
  var el = document.getElementById(‘ora’);
  while(el.firstChild){
         el.removeChild(el.firstChild);
  }
  …




                  Modificare il testo di un elemento
<p id=‘ora’>Ore 17:33</p>

3• Creo un nuovo nodo di tipo testo
  var d = new Date();
  var el = document.getElementById(‘ora’);
  while(el.firstChild){
         el.removeChild(el.firstChild);
  }
  var text = ‘Ore ‘ + d.getHours() + ‘:’ + d.getMinutes();
  var textNode = document.createTextNode(text);




                  Modificare il testo di un elemento
<p id=‘ora’>Ore 17:33</p>

4• Aggiungo il nuovo nodo al nodo principale
  var d = new Date();
  var el = document.getElementById(‘ora’);
  while(el.firstChild){
         el.removeChild(el.firstChild);
  }
  var text = ‘Ore ‘ + d.getHours() + ‘:’ + d.getMinutes();
  var textNode = document.createTextNode(text);
  el.appendChild(textNode);


                  Modificare il testo di un elemento
Scriviamo una

funzione che
imposti tutti i link
della pagina affinché si
aprano su una nuova
finestra ( target=‘_blank’ )
1• Recupero tutti gli elementi <a>:


  function a_InBlank() {
      var links = document.getElementsByTagName(‘a’);
      for(var i=0;i<links.length;i++){
          var a = links[i];
          if(!a.getAttribute(‘target’)){
              a.setAttribute(‘target’, ‘_blank’);
          }
      }
  }

                       Modificare il testo di un elemento
2• Per ogni elemento verifico se l’attributo
   target è già definito
  function a_InBlank() {
      var links = document.getElementsByTagName(‘a’);
      for(var i=0;i<links.length;i++){
          var a = links[i];
          if(!a.getAttribute(‘target’)){
              a.setAttribute(‘target’, ‘_blank’);
          }
      }
  }

                       Modificare il testo di un elemento
3• Se non è già stato definito, imposto il valore
   a _blank
  function a_InBlank() {
      var links = document.getElementsByTagName(‘a’);
      for(var i=0;i<links.length;i++){
          var a = links[i];
          if(!a.getAttribute(‘target’)){
              a.setAttribute(‘target’, ‘_blank’);
          }
      }
  }

                       Modificare il testo di un elemento
3• Se non è già stato definito, imposto il valore
   a _blank
  function a_InBlank() {
      var links = document.getElementsByTagName(‘a’);
      for(var i=0;i<links.length;i++){
          var a = links[i];
          if(!a.getAttribute(‘target’)){
              a.setAttribute(‘target’, ‘_blank’);
          }
      }           Posso scriverlo anche così: a.target = ‘_blank’;
  }

                       Modificare il testo di un elemento
ma
come faccio a far eseguire la
funzione al caricamento
della pagina?
window.onload = a_InBlank
</script>
</head>
<body>
…
evento di caricamento della pagina


  window.onload = a_InBlank
</script>
</head>
<body>
…
evento di caricamento della pagina


  window.onload = a_InBlank
</script>
</head>     funzione assegnata come handler dell’evento

<body>
…
un   evento
ci dice che qualcosa      è
      accaduto e noi
  possiamo decidere
        che cosa fare
           quando si verifica
onresize

onload
         onclick
            onmouseover

 onkeyup      onmouseout

              onblur
• Prova a cliccare il pulsante …
 function trick() {
     var btn= document.getElementById(‘btn’);
     var y = Math.floor(Math.random() * 100);
     btn.style.position = ‘absolute’;
     btn.style.top = y + ‘px’;
  };
                                   Questo è un event handler
 …
 <input type=‘button’ id=‘btn’ value=‘Clicca qui’
       onmouseover=‘trick()’ onclick=‘alert(“Hai vinto!”)’ />


                        Giocare un po’ con gli eventi
HTML e
JavaScript teniamoli
            separati
function trick() {
    var btn= document.getElementById(‘btn’);
    var y = Math.floor(Math.random() * 100);
    btn.style.position = ‘absolute’;
    btn.style.top = y + ‘px’;
 };
…
<input type=‘button’ id=‘btn’ value=‘Clicca qui’

      onmouseover=‘trick()’ onclick=‘alert(“Hai vinto!”)’ />
function trickyButton() {
    var inputs = document.getElementsByTagName(‘input’);
    for(var i=0; i < inputs.length; i++){
        var el = inputs[i];
        if(el.className == ‘tricky’ && el.type == ‘button’)
          el.onmouseover = trick;
    }
}                                               Sovrascrive qualsiasi
                                                altro event handler
window.onload = trickyButtons;              !   definito in precedenza
possiamo anche

controllare il tempo
        e decidere esattamente

                   quando
         far eseguire al browser
                le nostre funzioni
http://jsfiddle.net/SnbfM/
• Proviamo a simulare il funzionamento di un
  semaforo con JavaScript:
  – premendo il tasto 'V' far scattare il verde
  – premendo il tasto 'R' far arrivare il rosso
  – aggiungere il giallo tra il verde e il rosso con una
    attesa di 4 secondi




            Controllare il tempo con JavaScript
• Tutto l’HTML che ci serve:
  <h1>Semaforo</h1>
  <table id=‘semaphore’>
    <tr>
      <td id=‘red’ class=‘on’>&nbsp;</td>
    </tr>
    <tr>
      <td id=‘yellow’>&nbsp;</td>
    </tr>
    <tr>
      <td id=‘green’>&nbsp;</td>
    </tr>
  </table>



             Controllare il tempo con JavaScript
• Tutti i CSS che ci servono:

  #semaphore {               #red.on {
    background-color:#000;     background-color: red;
    margin:20px;             }
    border-spacing:5px;
  }                          #yellow.on {
                               background-color: #ffAE00;
  #semaphore td {            }
    width:30px;
    height:30px;             #green.on {
    background-color:#333;     background-color: green;
  }                          }




              Controllare il tempo con JavaScript
1• Adesso, intercettiamo con JavaScript la
  pressione di un tasto:
  function keyDown(e) {
    var key = String.fromCharCode(event.keyCode);
    if(key == 'V') { go(); }
    else if(key == 'R')
    {
       decelerate();
       setTimeout('stop()',4000);
    }
  }

  document.onkeydown = keyDown;


            Controllare il tempo con JavaScript
2• Scriviamo una funzione che spenga tutte le
  luci del semaforo:
  function clear() {
    var lights = document.getElementsByTagName('td');
    for(var i=0; i < lights.length; i++) {
      lights[i].className = '';
    }
  }




            Controllare il tempo con JavaScript
3• Per concludere scriviamo le funzioni per
  cambiare gli stati del semaforo:
   function stop() {
     clear();
     document.getElementById('red').className = 'on';
   }

   function decelerate() {
     clear();
     document.getElementById('yellow').className = 'on';
   }

   function go() {
     if(!document.getElementById('yellow').className) {
        clear();
        document.getElementById('green').className = 'on';
     }
   }


                Controllare il tempo con JavaScript
jquery
“change the way that you write JavaScript”



document.getElementsByTagName(‘a’)


lo possiamo scrivere
così:
Trova gli elementi
usando i selettori CSS
Seleziona per Id
$(‘#semaphore’)
Seleziona per class
$(‘.on’)
Seleziona per tipo di tag
$(‘a’)
Come con i CSS
$(‘#semaphore td’)
Esegui un’operazione
sugli elementi trovati
Manipolazione del DOM
.before(), .appendTo()
Attributi
.addClass(), .attr(), .val()
Gestione eventi
.click(), .bind()
Animazioni
.hide(), .fadeOut(), .animate()
function clear() {
  var lights = document.getElementsByTagName('td');
  for(var i=0; i < lights.length; i++) {
    lights[i].className = '';
  }
}
                                 Rimuovo la classe specifica

function clear() {
    $(‘td’).removeClass(‘on’);
}
• Vi ricordate il problema di assegnare un
  event handler all’evento onload senza
  sovrascriverne i precedenti?
  document.onload = a_InBlank;

• Con jQuery diventa:

  $(document).ready(a_InBlank);
            oppure

  $(a_InBlank);             Questo è unobtrusive
                            JavaScript al 100%


 Eseguire codice al caricamento della pagina
Credits
Le immagini contenute in questa presentazione
hanno licenza Creative Commons


Slide 7: http://www.flickr.com/photos/pisosantacruz/414375220/
Slide 20: http://www.flickr.com/photos/32347177@N02/5438832695/
Slide 37: http://www.flickr.com/photos/59951793@N00/2035571848/in/photostream/
Slide 38: http://www.flickr.com/photos/gato-gato-gato/4166319893/in/photostream/
Slide 40: http://www.flickr.com/photos/50251125@N08/6303643943/
Slide 43: http://www.flickr.com/photos/28481088@N00/2641260615/in/photostream/
Slide 44: http://www.flickr.com/photos/darko_pevec/2221561604/
Thank You   MANUEL SCAPOLAN
            website: www.manuelscapolan.it
            twitter: manuelscapolan
            e-mail: info@manuelscapolan.it

Más contenido relacionado

La actualidad más candente

jQuery - 1 | WebMaster & WebDesigner
jQuery - 1 | WebMaster & WebDesignerjQuery - 1 | WebMaster & WebDesigner
jQuery - 1 | WebMaster & WebDesignerMatteo Magni
 
Drupal Day 2011 - Node.js e Drupal
Drupal Day 2011 - Node.js e DrupalDrupal Day 2011 - Node.js e Drupal
Drupal Day 2011 - Node.js e DrupalDrupalDay
 
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
 
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webLuca Milan
 
AngularJS: server communication
AngularJS: server communicationAngularJS: server communication
AngularJS: server communicationVittorio Conte
 
Javascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il webJavascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il webRoberto Messora
 
Corso WebApp iOS - Lezione 06: Web Development for iOS Devices
Corso WebApp iOS - Lezione 06:   Web Development for iOS DevicesCorso WebApp iOS - Lezione 06:   Web Development for iOS Devices
Corso WebApp iOS - Lezione 06: Web Development for iOS DevicesAndrea Picchi
 
Lezione12: Autenticazione e gestione delle sessioni in REST
Lezione12: Autenticazione e gestione delle sessioni in RESTLezione12: Autenticazione e gestione delle sessioni in REST
Lezione12: Autenticazione e gestione delle sessioni in RESTAndrea Della Corte
 
corso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascriptcorso web developer - Introduzione a Javascript
corso web developer - Introduzione a JavascriptRiccardo Piccioni
 
CommitUniversity AngularJSAdvanced Andrea Vallotti
CommitUniversity  AngularJSAdvanced Andrea VallottiCommitUniversity  AngularJSAdvanced Andrea Vallotti
CommitUniversity AngularJSAdvanced Andrea VallottiCommit University
 
Silverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaSilverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaMauro Servienti
 
Introduzione a WebGL
Introduzione a WebGLIntroduzione a WebGL
Introduzione a WebGLnigerpunk
 
Simple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computingSimple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computingFrancesca1980
 

La actualidad más candente (20)

jQuery - 1 | WebMaster & WebDesigner
jQuery - 1 | WebMaster & WebDesignerjQuery - 1 | WebMaster & WebDesigner
jQuery - 1 | WebMaster & WebDesigner
 
Many Designs Elements
Many Designs ElementsMany Designs Elements
Many Designs Elements
 
Drupal Day 2011 - Node.js e Drupal
Drupal Day 2011 - Node.js e DrupalDrupal Day 2011 - Node.js e Drupal
Drupal Day 2011 - Node.js e Drupal
 
#dd12 grillo daniele_xpages_tips_tricks_rev2
#dd12 grillo daniele_xpages_tips_tricks_rev2#dd12 grillo daniele_xpages_tips_tricks_rev2
#dd12 grillo daniele_xpages_tips_tricks_rev2
 
Corso progettazione
Corso progettazioneCorso progettazione
Corso progettazione
 
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)
 
Ddive Xpage852
Ddive Xpage852Ddive Xpage852
Ddive Xpage852
 
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni web
 
Angularjs
AngularjsAngularjs
Angularjs
 
Angular js: routing
Angular js: routingAngular js: routing
Angular js: routing
 
AngularJS: server communication
AngularJS: server communicationAngularJS: server communication
AngularJS: server communication
 
Javascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il webJavascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il web
 
Corso WebApp iOS - Lezione 06: Web Development for iOS Devices
Corso WebApp iOS - Lezione 06:   Web Development for iOS DevicesCorso WebApp iOS - Lezione 06:   Web Development for iOS Devices
Corso WebApp iOS - Lezione 06: Web Development for iOS Devices
 
Lezione12: Autenticazione e gestione delle sessioni in REST
Lezione12: Autenticazione e gestione delle sessioni in RESTLezione12: Autenticazione e gestione delle sessioni in REST
Lezione12: Autenticazione e gestione delle sessioni in REST
 
corso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascriptcorso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascript
 
MyTask
MyTaskMyTask
MyTask
 
CommitUniversity AngularJSAdvanced Andrea Vallotti
CommitUniversity  AngularJSAdvanced Andrea VallottiCommitUniversity  AngularJSAdvanced Andrea Vallotti
CommitUniversity AngularJSAdvanced Andrea Vallotti
 
Silverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaSilverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteria
 
Introduzione a WebGL
Introduzione a WebGLIntroduzione a WebGL
Introduzione a WebGL
 
Simple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computingSimple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computing
 

Destacado

Tutte le novità di ASP.NET MVC3
Tutte le novità di ASP.NET MVC3Tutte le novità di ASP.NET MVC3
Tutte le novità di ASP.NET MVC3Manuel Scapolan
 
Dai delegati a LINQ con C#
Dai delegati a LINQ con C#Dai delegati a LINQ con C#
Dai delegati a LINQ con C#Manuel Scapolan
 
C# e la Framework Class Library
C# e la Framework Class LibraryC# e la Framework Class Library
C# e la Framework Class LibraryManuel Scapolan
 
Managed Extensibility Framework (MEF)
Managed Extensibility Framework (MEF)Managed Extensibility Framework (MEF)
Managed Extensibility Framework (MEF)Manuel Scapolan
 
AntiPatterns: i vizi del programmatore
AntiPatterns: i vizi del programmatoreAntiPatterns: i vizi del programmatore
AntiPatterns: i vizi del programmatoreManuel Scapolan
 
JavaScript Object Oriented
JavaScript Object OrientedJavaScript Object Oriented
JavaScript Object OrientedManuel Scapolan
 
TFS and Scrum - Lessons Learned
TFS and Scrum - Lessons LearnedTFS and Scrum - Lessons Learned
TFS and Scrum - Lessons LearnedManuel Scapolan
 
Domain Driven Design e CQRS
Domain Driven Design e CQRSDomain Driven Design e CQRS
Domain Driven Design e CQRSManuel Scapolan
 
Entity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernateEntity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernateManuel Scapolan
 
Stai guardando i dati sbagliati
Stai guardando i dati sbagliatiStai guardando i dati sbagliati
Stai guardando i dati sbagliatiAlberto Brandolini
 
Scrum? E' come fare il bucato!
Scrum? E' come fare il bucato!Scrum? E' come fare il bucato!
Scrum? E' come fare il bucato!Manuel Scapolan
 
Costruire l'identità digitale con il piano editoriale
Costruire l'identità digitale con il piano editorialeCostruire l'identità digitale con il piano editoriale
Costruire l'identità digitale con il piano editorialeFederico Venturini
 
Mastering Twig (DrupalCon Barcelona 2015)
Mastering Twig (DrupalCon Barcelona 2015)Mastering Twig (DrupalCon Barcelona 2015)
Mastering Twig (DrupalCon Barcelona 2015)Javier Eguiluz
 
Introduzione a JavaScript
Introduzione a JavaScriptIntroduzione a JavaScript
Introduzione a JavaScriptGiovanni Buffa
 
Angular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un frameworkAngular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un frameworkGiovanni Buffa
 

Destacado (20)

Tutte le novità di ASP.NET MVC3
Tutte le novità di ASP.NET MVC3Tutte le novità di ASP.NET MVC3
Tutte le novità di ASP.NET MVC3
 
Dai delegati a LINQ con C#
Dai delegati a LINQ con C#Dai delegati a LINQ con C#
Dai delegati a LINQ con C#
 
C# e la Framework Class Library
C# e la Framework Class LibraryC# e la Framework Class Library
C# e la Framework Class Library
 
Managed Extensibility Framework (MEF)
Managed Extensibility Framework (MEF)Managed Extensibility Framework (MEF)
Managed Extensibility Framework (MEF)
 
AntiPatterns: i vizi del programmatore
AntiPatterns: i vizi del programmatoreAntiPatterns: i vizi del programmatore
AntiPatterns: i vizi del programmatore
 
JavaScript Object Oriented
JavaScript Object OrientedJavaScript Object Oriented
JavaScript Object Oriented
 
TFS and Scrum - Lessons Learned
TFS and Scrum - Lessons LearnedTFS and Scrum - Lessons Learned
TFS and Scrum - Lessons Learned
 
Knockout.js
Knockout.jsKnockout.js
Knockout.js
 
Domain Driven Design e CQRS
Domain Driven Design e CQRSDomain Driven Design e CQRS
Domain Driven Design e CQRS
 
Entity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernateEntity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernate
 
Stai guardando i dati sbagliati
Stai guardando i dati sbagliatiStai guardando i dati sbagliati
Stai guardando i dati sbagliati
 
NOSQL
NOSQLNOSQL
NOSQL
 
Scrum? E' come fare il bucato!
Scrum? E' come fare il bucato!Scrum? E' come fare il bucato!
Scrum? E' come fare il bucato!
 
Costruire l'identità digitale con il piano editoriale
Costruire l'identità digitale con il piano editorialeCostruire l'identità digitale con il piano editoriale
Costruire l'identità digitale con il piano editoriale
 
Mastering Twig (DrupalCon Barcelona 2015)
Mastering Twig (DrupalCon Barcelona 2015)Mastering Twig (DrupalCon Barcelona 2015)
Mastering Twig (DrupalCon Barcelona 2015)
 
Introduzione a JavaScript
Introduzione a JavaScriptIntroduzione a JavaScript
Introduzione a JavaScript
 
Liberate il kraken
Liberate il krakenLiberate il kraken
Liberate il kraken
 
Angular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un frameworkAngular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un framework
 
OOP with C#
OOP with C#OOP with C#
OOP with C#
 
HTML e CSS
HTML e CSSHTML e CSS
HTML e CSS
 

Similar a JavaScript

Javascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesignerJavascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesignerMatteo Magni
 
Javascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesignerJavascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesignerMatteo Magni
 
E suap - tecnologie client
E suap - tecnologie client E suap - tecnologie client
E suap - tecnologie client Sabino Labarile
 
Matteo Bicocchi - Introducing HTML5
Matteo Bicocchi - Introducing HTML5Matteo Bicocchi - Introducing HTML5
Matteo Bicocchi - Introducing HTML5Pietro Polsinelli
 
Session 02 - schema design e architettura
Session 02 - schema design e architetturaSession 02 - schema design e architettura
Session 02 - schema design e architetturaMongoDB
 
Coding Day May 26th Un'architettura scalabile e modulare per il css
Coding Day May 26th Un'architettura scalabile e modulare per il cssCoding Day May 26th Un'architettura scalabile e modulare per il css
Coding Day May 26th Un'architettura scalabile e modulare per il cssVendini-Italy
 
Rich Ajax Web Interfaces in Jquery
Rich Ajax Web Interfaces in JqueryRich Ajax Web Interfaces in Jquery
Rich Ajax Web Interfaces in JqueryAlberto Buschettu
 
Best practices per lo sviluppo Frontend
Best practices per lo sviluppo FrontendBest practices per lo sviluppo Frontend
Best practices per lo sviluppo FrontendCristiano Rastelli
 
Javascript Camp - Listener Per Eventi
Javascript Camp - Listener Per EventiJavascript Camp - Listener Per Eventi
Javascript Camp - Listener Per EventiSimone Gentili
 
MongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDBMongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDBStefano Dindo
 
Introduzione ad angular 7/8
Introduzione ad angular 7/8Introduzione ad angular 7/8
Introduzione ad angular 7/8Valerio Radice
 
Introduzione a jQuery
Introduzione a jQueryIntroduzione a jQuery
Introduzione a jQuerySandro Marcon
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.jsMichele Capra
 
Drupal Day 2012 - DRUPAL 8: I CAMBIAMENTI CHE CI ASPETTANO
Drupal Day 2012 - DRUPAL 8:  I CAMBIAMENTI CHE CI ASPETTANODrupal Day 2012 - DRUPAL 8:  I CAMBIAMENTI CHE CI ASPETTANO
Drupal Day 2012 - DRUPAL 8: I CAMBIAMENTI CHE CI ASPETTANODrupalDay
 
2014 it - app dev series - 04 - indicizzazione
2014   it - app dev series - 04 - indicizzazione2014   it - app dev series - 04 - indicizzazione
2014 it - app dev series - 04 - indicizzazioneMongoDB
 
Html e Css - 1 | WebMaster & WebDesigner
Html e Css - 1 | WebMaster & WebDesigner Html e Css - 1 | WebMaster & WebDesigner
Html e Css - 1 | WebMaster & WebDesigner Matteo Magni
 

Similar a JavaScript (20)

Javascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesignerJavascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesigner
 
Javascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesignerJavascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesigner
 
E suap - tecnologie client
E suap - tecnologie client E suap - tecnologie client
E suap - tecnologie client
 
Matteo Bicocchi - Introducing HTML5
Matteo Bicocchi - Introducing HTML5Matteo Bicocchi - Introducing HTML5
Matteo Bicocchi - Introducing HTML5
 
Session 02 - schema design e architettura
Session 02 - schema design e architetturaSession 02 - schema design e architettura
Session 02 - schema design e architettura
 
Coding Day May 26th Un'architettura scalabile e modulare per il css
Coding Day May 26th Un'architettura scalabile e modulare per il cssCoding Day May 26th Un'architettura scalabile e modulare per il css
Coding Day May 26th Un'architettura scalabile e modulare per il css
 
Rich Ajax Web Interfaces in Jquery
Rich Ajax Web Interfaces in JqueryRich Ajax Web Interfaces in Jquery
Rich Ajax Web Interfaces in Jquery
 
Best practices per lo sviluppo Frontend
Best practices per lo sviluppo FrontendBest practices per lo sviluppo Frontend
Best practices per lo sviluppo Frontend
 
Javascript Camp - Listener Per Eventi
Javascript Camp - Listener Per EventiJavascript Camp - Listener Per Eventi
Javascript Camp - Listener Per Eventi
 
DDive - 8.5.2 Xpages - L'evoluzione continua
DDive - 8.5.2 Xpages - L'evoluzione continuaDDive - 8.5.2 Xpages - L'evoluzione continua
DDive - 8.5.2 Xpages - L'evoluzione continua
 
MongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDBMongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDB
 
Introduzione ad angular 7/8
Introduzione ad angular 7/8Introduzione ad angular 7/8
Introduzione ad angular 7/8
 
Wcmil2018
Wcmil2018Wcmil2018
Wcmil2018
 
Introduzione a jQuery
Introduzione a jQueryIntroduzione a jQuery
Introduzione a jQuery
 
Introduzione a node.js
Introduzione a node.jsIntroduzione a node.js
Introduzione a node.js
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.js
 
Dojo nuovo look alle vostre applicazioni web Domino
Dojo nuovo look alle vostre applicazioni web DominoDojo nuovo look alle vostre applicazioni web Domino
Dojo nuovo look alle vostre applicazioni web Domino
 
Drupal Day 2012 - DRUPAL 8: I CAMBIAMENTI CHE CI ASPETTANO
Drupal Day 2012 - DRUPAL 8:  I CAMBIAMENTI CHE CI ASPETTANODrupal Day 2012 - DRUPAL 8:  I CAMBIAMENTI CHE CI ASPETTANO
Drupal Day 2012 - DRUPAL 8: I CAMBIAMENTI CHE CI ASPETTANO
 
2014 it - app dev series - 04 - indicizzazione
2014   it - app dev series - 04 - indicizzazione2014   it - app dev series - 04 - indicizzazione
2014 it - app dev series - 04 - indicizzazione
 
Html e Css - 1 | WebMaster & WebDesigner
Html e Css - 1 | WebMaster & WebDesigner Html e Css - 1 | WebMaster & WebDesigner
Html e Css - 1 | WebMaster & WebDesigner
 

JavaScript

  • 1. Sviluppo applicazioni web e linguaggio HTML LEZIONE 02 JAVASCRIPT
  • 2. JavaScript? E’ un linguaggio di scripting lato-client, interpretato da un browser web
  • 3. A cosa serve? Rende le nostre pagine interattive Rispondono alle azioni degli utenti
  • 4. CLIENT SERVER Quando l’elaborazione è a carico del server
  • 5. CLIENT SERVER Quando l’elaborazione è a carico del client
  • 6. • Come standard nasce alla fine degli anni 90 Standardizzazione del Microsoft linguaggio da parte Sun Microsystem e propone 2 dell’ECMA(1) Java linguaggi Nasce ECMAScript Sviluppatori di alternativi Mosaic: primo Mosaic VBScript e Adozione e browser a fondano Netscape Jscript in riconoscimento dello interfaccia Netscape Navigator 2.0 e Internet standard da parte grafica Communicatio JavaScript 1.0 Explorer 3.0 dell’ISO(2) n Corporation 1992 1994 1995 1996 1997/1998 (1) ECMA – European Computer Manufacturers Association (2) ISO – Internation Organization for Standardization Quando è nato?
  • 7. • Nella pagina HTML dentro un tag <script>: <script type=‘text/javascript’> … </script> 1 Da preferire per mantenere la separazione tra codice 2 HTML e codice di scripting Se JavaScript è coinvolto nella costruzione del layout della pagina Dove scrivo il codice JavaScript?
  • 8. • In file esterni (file di testo con estensione .js) – Per alleggerire la pagina HTML – Per utilizzare il codice in più pagine – Per ottimizzare il caricamento delle pagine con lo stesso codice (il file viene salvato nella cache del browser – se attiva) • Il codice viene reso disponibile nella pagina attraverso la seguente sintassi prima della fine del tag <head> <script type="text/javascript" src=“my_first_jsfile.js"></script> Dove scrivo il codice javascript???
  • 9. Hello World! … <script type=‘text/javascript’> alert(‘Hello World!’); </script> </head> …
  • 10. (2) Hello World! … </head> <script type=‘text/javascript’> document.write(‘Hello World!’); </script> …
  • 11. un po’ di codice … … <script type=‘text/javascript’> var d = new Date(); var time = d.getHours(); if (time < 18) { document.write(‘<h1>Buongiorno</h1>’); } else { document.write(‘<h1>Buonasera</h1>’); } </script> …
  • 12. meglio se in una funzione: … function greetings() { var d = new Date(); var time = d.getHours(); if (time < 18) { document.write(‘<h1>Buongiorno</h1>’); } else { document.write(‘<h1>Buonasera</h1>’); } } …
  • 13. • Una variabile dichiarata all’interno di una funzione ha validità locale per quella funzione • Se dichiaro una variabile esternamente questa ha validità globale • Se non dichiaro la variabile non viene fatta distinzione tra locale e globale e assume validità su tutta la pagina Ambito delle variabili
  • 14. • Il DOM descrive come i diversi oggetti di una pagina sono collegati tra loro <html> <head> <body> <title> <meta> <ul> <h1> <li> <li> Document Object Model
  • 15. DOM Tutto il contenuto presente in una pagina HTML è rappresentato da un document
  • 16. DOM Tutto il contenuto presente in una pagina HTML è rappresentato da un document, il document è costituito da nodi
  • 17. DOM Tutto il contenuto presente in una pagina HTML è rappresentato da un document, il document è costituito da nodi, ogni tag è un nodo di tipo element
  • 18. <span class=“nota”> Struttura di un nodo </span> element span text attribute Struttura di un class=“nota” nodo
  • 19. proprietà di un nodo nodeValue childNodes Il valore salvato nel Insieme dei nodi figli nodo (eccetto per il del nodo corrente tipo element) firstChild Primo nodo figlio del nodeType nodo corrente Il tipo di nodo, ovvero TEXT, ELEMENT o ATTRIBUTE espresso in lastChild numero Ultimo nodo figlio del nodo corrente
  • 20. Il DOM può essere manipolato con JavaScript al fine di modificare il contenuto di una pagina HTML
  • 21. <p id=‘ora’>Ore 17:33</p> 1• Recupero l’elemento tramite l’id: var d = new Date(); var el = document.getElementById(‘ora’); var text = el.firstChild; text.nodeValue = ‘Ore ‘ + d.getHours() + ‘:’ + d.getMinutes(); Modificare il testo di un elemento
  • 22. <p id=‘ora’>Ore 17:33</p> 2• Passo al primo nodo figlio per avere il testo var d = new Date(); var el = document.getElementById(‘ora’); var text = el.firstChild; text.nodeValue = ‘Ore ‘ + d.getHours() + ‘:’ + d.getMinutes(); Modificare il testo di un elemento
  • 23. <p id=‘ora’>Ore 17:33</p> 3• Assegno tramite la proprietà nodeValue il nuovo valore: var d = new Date(); var el = document.getElementById(‘ora’); var text = el.firstChild; text.nodeValue = ‘Ore ‘ + d.getHours() + ‘:’ + d.getMinutes(); Modificare il testo di un elemento
  • 24. ma se vogliamo fare le cose per bene …
  • 25. <p id=‘ora’>Ore 17:33</p> 2• Rimuovo tutti gli elementi figli del nodo corrente var d = new Date(); var el = document.getElementById(‘ora’); while(el.firstChild){ el.removeChild(el.firstChild); } … Modificare il testo di un elemento
  • 26. <p id=‘ora’>Ore 17:33</p> 3• Creo un nuovo nodo di tipo testo var d = new Date(); var el = document.getElementById(‘ora’); while(el.firstChild){ el.removeChild(el.firstChild); } var text = ‘Ore ‘ + d.getHours() + ‘:’ + d.getMinutes(); var textNode = document.createTextNode(text); Modificare il testo di un elemento
  • 27. <p id=‘ora’>Ore 17:33</p> 4• Aggiungo il nuovo nodo al nodo principale var d = new Date(); var el = document.getElementById(‘ora’); while(el.firstChild){ el.removeChild(el.firstChild); } var text = ‘Ore ‘ + d.getHours() + ‘:’ + d.getMinutes(); var textNode = document.createTextNode(text); el.appendChild(textNode); Modificare il testo di un elemento
  • 28. Scriviamo una funzione che imposti tutti i link della pagina affinché si aprano su una nuova finestra ( target=‘_blank’ )
  • 29. 1• Recupero tutti gli elementi <a>: function a_InBlank() { var links = document.getElementsByTagName(‘a’); for(var i=0;i<links.length;i++){ var a = links[i]; if(!a.getAttribute(‘target’)){ a.setAttribute(‘target’, ‘_blank’); } } } Modificare il testo di un elemento
  • 30. 2• Per ogni elemento verifico se l’attributo target è già definito function a_InBlank() { var links = document.getElementsByTagName(‘a’); for(var i=0;i<links.length;i++){ var a = links[i]; if(!a.getAttribute(‘target’)){ a.setAttribute(‘target’, ‘_blank’); } } } Modificare il testo di un elemento
  • 31. 3• Se non è già stato definito, imposto il valore a _blank function a_InBlank() { var links = document.getElementsByTagName(‘a’); for(var i=0;i<links.length;i++){ var a = links[i]; if(!a.getAttribute(‘target’)){ a.setAttribute(‘target’, ‘_blank’); } } } Modificare il testo di un elemento
  • 32. 3• Se non è già stato definito, imposto il valore a _blank function a_InBlank() { var links = document.getElementsByTagName(‘a’); for(var i=0;i<links.length;i++){ var a = links[i]; if(!a.getAttribute(‘target’)){ a.setAttribute(‘target’, ‘_blank’); } } Posso scriverlo anche così: a.target = ‘_blank’; } Modificare il testo di un elemento
  • 33. ma come faccio a far eseguire la funzione al caricamento della pagina?
  • 35. evento di caricamento della pagina window.onload = a_InBlank </script> </head> <body> …
  • 36. evento di caricamento della pagina window.onload = a_InBlank </script> </head> funzione assegnata come handler dell’evento <body> …
  • 37. un evento ci dice che qualcosa è accaduto e noi possiamo decidere che cosa fare quando si verifica
  • 38. onresize onload onclick onmouseover onkeyup onmouseout onblur
  • 39. • Prova a cliccare il pulsante … function trick() { var btn= document.getElementById(‘btn’); var y = Math.floor(Math.random() * 100); btn.style.position = ‘absolute’; btn.style.top = y + ‘px’; }; Questo è un event handler … <input type=‘button’ id=‘btn’ value=‘Clicca qui’ onmouseover=‘trick()’ onclick=‘alert(“Hai vinto!”)’ /> Giocare un po’ con gli eventi
  • 41. function trick() { var btn= document.getElementById(‘btn’); var y = Math.floor(Math.random() * 100); btn.style.position = ‘absolute’; btn.style.top = y + ‘px’; }; … <input type=‘button’ id=‘btn’ value=‘Clicca qui’ onmouseover=‘trick()’ onclick=‘alert(“Hai vinto!”)’ />
  • 42. function trickyButton() { var inputs = document.getElementsByTagName(‘input’); for(var i=0; i < inputs.length; i++){ var el = inputs[i]; if(el.className == ‘tricky’ && el.type == ‘button’) el.onmouseover = trick; } } Sovrascrive qualsiasi altro event handler window.onload = trickyButtons; ! definito in precedenza
  • 43. possiamo anche controllare il tempo e decidere esattamente quando far eseguire al browser le nostre funzioni
  • 45. • Proviamo a simulare il funzionamento di un semaforo con JavaScript: – premendo il tasto 'V' far scattare il verde – premendo il tasto 'R' far arrivare il rosso – aggiungere il giallo tra il verde e il rosso con una attesa di 4 secondi Controllare il tempo con JavaScript
  • 46. • Tutto l’HTML che ci serve: <h1>Semaforo</h1> <table id=‘semaphore’> <tr> <td id=‘red’ class=‘on’>&nbsp;</td> </tr> <tr> <td id=‘yellow’>&nbsp;</td> </tr> <tr> <td id=‘green’>&nbsp;</td> </tr> </table> Controllare il tempo con JavaScript
  • 47. • Tutti i CSS che ci servono: #semaphore { #red.on { background-color:#000; background-color: red; margin:20px; } border-spacing:5px; } #yellow.on { background-color: #ffAE00; #semaphore td { } width:30px; height:30px; #green.on { background-color:#333; background-color: green; } } Controllare il tempo con JavaScript
  • 48. 1• Adesso, intercettiamo con JavaScript la pressione di un tasto: function keyDown(e) { var key = String.fromCharCode(event.keyCode); if(key == 'V') { go(); } else if(key == 'R') { decelerate(); setTimeout('stop()',4000); } } document.onkeydown = keyDown; Controllare il tempo con JavaScript
  • 49. 2• Scriviamo una funzione che spenga tutte le luci del semaforo: function clear() { var lights = document.getElementsByTagName('td'); for(var i=0; i < lights.length; i++) { lights[i].className = ''; } } Controllare il tempo con JavaScript
  • 50. 3• Per concludere scriviamo le funzioni per cambiare gli stati del semaforo: function stop() { clear(); document.getElementById('red').className = 'on'; } function decelerate() { clear(); document.getElementById('yellow').className = 'on'; } function go() { if(!document.getElementById('yellow').className) { clear(); document.getElementById('green').className = 'on'; } } Controllare il tempo con JavaScript
  • 52. “change the way that you write JavaScript” document.getElementsByTagName(‘a’) lo possiamo scrivere così:
  • 53. Trova gli elementi usando i selettori CSS Seleziona per Id $(‘#semaphore’) Seleziona per class $(‘.on’) Seleziona per tipo di tag $(‘a’) Come con i CSS $(‘#semaphore td’)
  • 54. Esegui un’operazione sugli elementi trovati Manipolazione del DOM .before(), .appendTo() Attributi .addClass(), .attr(), .val() Gestione eventi .click(), .bind() Animazioni .hide(), .fadeOut(), .animate()
  • 55. function clear() { var lights = document.getElementsByTagName('td'); for(var i=0; i < lights.length; i++) { lights[i].className = ''; } } Rimuovo la classe specifica function clear() { $(‘td’).removeClass(‘on’); }
  • 56. • Vi ricordate il problema di assegnare un event handler all’evento onload senza sovrascriverne i precedenti? document.onload = a_InBlank; • Con jQuery diventa: $(document).ready(a_InBlank); oppure $(a_InBlank); Questo è unobtrusive JavaScript al 100% Eseguire codice al caricamento della pagina
  • 57. Credits Le immagini contenute in questa presentazione hanno licenza Creative Commons Slide 7: http://www.flickr.com/photos/pisosantacruz/414375220/ Slide 20: http://www.flickr.com/photos/32347177@N02/5438832695/ Slide 37: http://www.flickr.com/photos/59951793@N00/2035571848/in/photostream/ Slide 38: http://www.flickr.com/photos/gato-gato-gato/4166319893/in/photostream/ Slide 40: http://www.flickr.com/photos/50251125@N08/6303643943/ Slide 43: http://www.flickr.com/photos/28481088@N00/2641260615/in/photostream/ Slide 44: http://www.flickr.com/photos/darko_pevec/2221561604/
  • 58. Thank You MANUEL SCAPOLAN website: www.manuelscapolan.it twitter: manuelscapolan e-mail: info@manuelscapolan.it