SlideShare a Scribd company logo
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

More Related Content

PPTX
PDF
Corso Java 3 - WEB
PDF
Closure Visto Da Vicino
PDF
Node.js - Server Side Javascript
PPTX
PDF
Sviluppo Web con React e Delphi - Seminario Delphi Day 2016, Piacenza
PDF
jQuery - 1 | WebMaster & WebDesigner
PDF
Applicazioni Web ultra-performanti con Vue.js e Delphi
Corso Java 3 - WEB
Closure Visto Da Vicino
Node.js - Server Side Javascript
Sviluppo Web con React e Delphi - Seminario Delphi Day 2016, Piacenza
jQuery - 1 | WebMaster & WebDesigner
Applicazioni Web ultra-performanti con Vue.js e Delphi

What's hot (20)

PDF
jQuery - 1 | WebMaster & WebDesigner
ODP
Many Designs Elements
PDF
Drupal Day 2011 - Node.js e Drupal
PPT
#dd12 grillo daniele_xpages_tips_tricks_rev2
PDF
Corso progettazione
PPT
Introduzione a JavaScript e jQuery (2/2)
PPTX
AngularJS – Reinventare le applicazioni web
PDF
Angularjs
PPTX
Angular js: routing
PPTX
AngularJS: server communication
PPTX
Javascript avanzato: sfruttare al massimo il web
PDF
Corso WebApp iOS - Lezione 06: Web Development for iOS Devices
PDF
Lezione12: Autenticazione e gestione delle sessioni in REST
PPTX
corso web developer - Introduzione a Javascript
PDF
PPTX
CommitUniversity AngularJSAdvanced Andrea Vallotti
PPTX
Silverlight m v-vm @ DotNetteria
PDF
Introduzione a WebGL
PDF
Simple Cloud API: accesso semplificato al cloud computing
jQuery - 1 | WebMaster & WebDesigner
Many Designs Elements
Drupal Day 2011 - Node.js e Drupal
#dd12 grillo daniele_xpages_tips_tricks_rev2
Corso progettazione
Introduzione a JavaScript e jQuery (2/2)
AngularJS – Reinventare le applicazioni web
Angularjs
Angular js: routing
AngularJS: server communication
Javascript avanzato: sfruttare al massimo il web
Corso WebApp iOS - Lezione 06: Web Development for iOS Devices
Lezione12: Autenticazione e gestione delle sessioni in REST
corso web developer - Introduzione a Javascript
CommitUniversity AngularJSAdvanced Andrea Vallotti
Silverlight m v-vm @ DotNetteria
Introduzione a WebGL
Simple Cloud API: accesso semplificato al cloud computing
Ad

Viewers also liked (20)

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

Similar to JavaScript (20)

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