Javascript – Eventi 1

Javascript – Eventi 1: Nel paradigma di programmazione ad eventi il flusso del programma è largamente determinato dal verificarsi di eventi esterni. Nel caso del linguaggio Javascript gli eventi sono rappresentati per la maggior parte dall’iterazione dell’utente con il sito web

DOM event handler

Lavoreremo sul seguente frammento HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>DOM events handler</title>
</head>
<body>
    <form>
        <label for="username">Inserisci il nome utente: </label>
        <input type="text" id="username"/>
        <div id="response"></div>
        <label for="password">Inserisci la password: </label>
        <input type="text" id="password"/>
    </form>
<script src="js/dom-events-handler.js"></script>
</body>
</html>

Con il seguente script controllo che il nome utente non inizi con il simbolo # (ovviamente è solo un esempio per esercitarci sugli eventi, difatti possiamo utilizzare l’attributo pattern, del linguaggio HTML, per verificare, tramite un RegExp, i caratteri immessi)

function checkUsername(){
    var elResponse = document.getElementById('response');
    var username = this.value;
    if(username.charAt(0)=='#'){
        elResponse.textContent='Il nome utente non può iniziare con #';
    }else{
        elResponse.textContent='';
    }
}
var elUsername= document.getElementById('username');
elUsername.onblur=checkUsername;

La funzione checkUsername() viene richiamata quando l’utente si sposta nella casella password, ovvero quando si verifica l’evento blur che ed è esattamente l’opposto dell’evento focus.

Con l’istruzione var username = this.value; creo una variabile di tipo String prendendo il valore inserito dall’utente, nella selezione sfrutto il metodo charAt() per controllare il contenuto del primo carattere, nel caso sia uguale al simbolo # scriveremo un messaggio nel div con id response .

Event Listener

Lo script successivo utilizzerà lo stesso algoritmo dello script precedente, ma utilizzo il metodo addEventListener, tale metodo richiede come primo argomento il nome dell’evento (blur nel nostro caso), come secondo la funzione da richiamare.

function checkUsername(){
    var elResponse = document.getElementById('response');
    var username = this.value;
    if(username.charAt(0)=='#'){
        elResponse.textContent='Il nome utente non può iniziare con #';
    }else{
        elResponse.textContent='';
    }
}
var elUsername= document.getElementById('username');
elUsername.addEventListener('blur',checkUsername,false);

Ricorda che il metodo addEventListener non è supportato nel browser Internet Explorer 8 e precedenti

Uso dei parametri con l’Event Listener

In situazioni reali spesso le funzioni ricevono parametri dinamicamente da file di impostazioni, dal server web, da un database. Quindi nel successivo script utilizzo una funzione che riceve un parametro con l’event Listener

var elUsername= document.getElementById('username');
elUsername.addEventListener('blur',function(){
    checkUsername('#');
    console.log('Evento blur');
},false);
function checkUsername(symbol){
    var elResponse = document.getElementById('response');
    if(elUsername.value.charAt(0)==symbol){
        elResponse.textContent='Il nome utente non può iniziare con #';
    }else{
        elResponse.textContent='';
    }
}

Nota che alla riga 2 del precedente script utilizzo una funzione anonima, in tale modo posso richiamare più funzioni quando si verifica un evento.

Oggetto Event

ogni volta che un evento viene attivato, l’oggetto evento contiene dati utili sull’evento, come ad esempio:

  • Su quale elemento si è verificato l’evento
  • In quale parte del vieport l’utente ha fatto click

Proviamo utilizzando la seguente pagina HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Event Object</title>
</head>
<body>
    <form>
        <label for="username">Inserisci il nome utente: </label>
        <input type="text" id="username"/>
        <div id="response"></div>
    </form>
<script src="js/event-object.js"></script>
</body>
</html>

Il seguente script grazie all’oggetto Event mi permette di sapere il tipo di evento e il nome del TAG in cui si è verificato

function targetInfo(e){
    var elResponse = document.getElementById('response');
    elResponse.innerHTML= "Tipo evento " + e.type;
    elResponse.innerHTML+="<br>Nel TAG: "+e.target.tagName;
}
var elUsername=document.getElementById('username');
elUsername.addEventListener('focus',targetInfo);

Nella prossima lezione: i differenti tipi di eventi

Pubblicato da Carlo Contardi

Carlo Contardi, docente di informatica e sviluppatore Full Stack, condivide la sua passione per la programmazione e l’informatica attraverso il suo blog Space Coding. Offre preziosi consigli e soluzioni pratiche a chi vuole imparare a programmare o migliorare le proprie abilità. 🚀👨‍💻

Translate »