Please note, this is a STATIC archive of website developer.mozilla.org from November 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

element.addEventListener

Sommario

addEventListener() permette di impostare delle funzioni che verranno chiamate al verificarsi dell'evento specificato, sull'oggetto specificato(target dell'evento).

Sintassi

target.addEventListener(tipo, codiceChiamato, usaCapture);
tipo 
Stringa che rappresenta il tipo di evento su cui mettersi in ascolto.
codiceChiamato 
L'oggetto che riceve una notifica quando avviene l'evento specificato. Deve essere un oggetto che implementa l'interfaccia EventListener ,o anche una semplice funzione Javascript.
usaCapture 
Se impostato a true, usaCapture indica che l'utente vuole utilizzare il capturing anzichè il bubbling (default). Quando la cattura inizia, tutti gli eventi del tipo specificato verranno propagati ai listener registrati prima di essere mandati a qualunque EventTarget sotto di essi nell'albero DOM. Gli eventi sopra di esso nell'albero DOM non innescheranno un EventListener che usa capture. Leggi per una spiegazione dettagliata.

Esempio

 <html>
 <head>
   <title>DOM Event Example</title>
   <style type="text/css">
     #t { border: 1px solid red }
     #t1 { background-color: pink; }
   </style>
   <script type="text/javascript">

   // Function to change the content of t2
   function modifyText() {
     var t2 = document.getElementById("t2");
     t2.firstChild.nodeValue = "three";    
   }
 
   // Function to add event listener to t
   function load() { 
     var el = document.getElementById("t"); 
     el.addEventListener("click", modifyText, false); 
   } 

   </script> 
 </head> 
 <body onload="load();"> 
 <table id="t"> 
   <tr><td id="t1">one</td></tr> 
   <tr><td id="t2">two</td></tr> 
 </table> 
 </body> 
 </html> 

Nell'esempio qui sopra, modifyText() è un listener per l'evento click registrato usando addEventListener(). Un click in un punto qualunque della tabella risalirà fino all'handler e causerà l'esecuzione di modifyText().

Note

Perchè usare addEventListener?

addEventListener è il modo corretto per registrare un listener, come da specifica W3C. I suoi benefici sono:

  • permette di aggiungere diversi handler per singolo evento. Ciò è particolarmente utile per le librerie DHTML e per le estensioni di Mozilla, che devono convivere tra loro senza andare in conflitto.
  • Dà un controllo migliore di cosa succede quando il listener viene attivato(capturing vs bubbling)
  • funziona con qualunque elemento DOM, non solo con gli elementi HTML.

Aggiungere un listener durante la propagazione dell'evento

Se si aggiunge un EventListener a un EventTarget mentre un evento viene processato, questo non sarà innescato dall'azione corrente, ma verrà aggiunto in una fase successiva del flusso dell'evento, come nella fase di bubbling.

Quando si hanno diversi ascoltatori di evento identici

Se più ascoltatori di evento identici sono registrati sullo stesso EventTarget con gli stessi parametri, le istanze duplicate saranno eliminate. Non fanno in modo che l'ascoltatore di eventi sia chiamato due volte e dato che sono eliminati, non è necessario rimuoverli col metodo removeEventListener.

Il valore di this

Registrare una funzione con addEventListener() cambia il valore di this—da notare che il valore di this è passato alla funzione dalla funzione chiamante.

Nell'esempio seguente, il valore di this all'interno di modifyText() quando è chiamato dall'evento onclick è una referenza alla tabella 't'. Se il gestore dell'evento onclick è aggiunto al sorgente HTML:

<table id="t" onclick="modifyText();">
  ...
</table>

allora il valore di this all'interno di modifyText() quando è chiamato dall'evento onclick sarà una referenza all'oggetto globale (window).

Passaggio automatico dell'oggetto event

Nel DOM di Gecko, quando gli eventi sono registrati dinamicamente una referenza all'oggetto event che ha causato l'evento è automaticamente passata come primo parametro - consulta la pagina Gecko DOM event.

Altri DOM(compatibilità con Internet Explorer)

Alcune implementazioni DOM supportano attachEvent al posto di addEventListener. Per supportarli, l'esempio seguente può essere modificato come:

if (el.addEventListener){
  el.addEventListener('click', modifyText, false); 
} else if (el.attachEvent){
  el.attachEvent('onclick', modifyText);
}

Maniera tradizionale per impostare eventi

addEventListener è stato introdotto nella specifica DOM 2 Events. Prima di questo, gli eventi erano registrati come segue:

// Using a function reference—note lack of '()'
el.onclick = modifyText;

// Using a function statement
element.onclick = function(){
                    ...statements...
                  };

In questo modo vengono rimpiazzati i gestori dell'evento onclick sull'elemento se ce ne sono. Similmente per gli altri eventi 'on' come onblur, onkeypress, e così via.

Perchè era essenzialmente parte del DOM 0, questo metodo è ampiamente supportato e non richiede codice aggiuntivo per una soluzione cross–browser; quindi è normalmente usato per registrare eventi dinamicamente a meno che siano necessarie funzioni extra di addEventListener.

Specifiche

addEventListener

Tag del documento e collaboratori

 Hanno collaborato alla realizzazione di questa pagina: vindega, teoli, khalid32, loris94, Samuele, DaViD83
 Ultima modifica di: vindega,