Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 75 di 112
  • livello avanzato
Indice lezioni

Eventi della tastiera

Gestire l'input da tastiera con gli eventi KeyPress, KeyDown, KeyUp. Intercettare le combinazioni di tasti.
Gestire l'input da tastiera con gli eventi KeyPress, KeyDown, KeyUp. Intercettare le combinazioni di tasti.
Link copiato negli appunti

L'inserimento di caratteri tramite la tastiera genera alcuni eventi che può essere utile gestire in diversi contesti applicativi: dalla validazione dell'input alla sua trasformazione o all'intercettazione di combinazione di tasti.

Gli eventi associati alla tastiera sono soltanto tre:

Campo Descrizione
keydown si verifica quando inizia la pressione su un tasto
keypress si verifica al completamento della pressione sul tasto
keyup si verifica quando il tasto viene rilasciato

Una distinzione fondamentale tra gli eventi keydown e keypress sta nel fatto che mentre il primo si verifica in corrispondenza della pressione su qualsiasi tasto, il secondo si verifica soltanto in corrispondenza della pressione su tasti alfanumerici. In altre parole, quando premiamo, ad esempio, sui tasti CTRL o SHIFT si verifica l'evento keydown ma non l'evento keypress.

L'oggetto Evento

Nella gestione degli eventi di tastiera giocano un ruolo fondamentale alcune proprietà dell'oggetto evento. In particolare le seguenti proprietà ci consentono di individuare il valore dell'input ricevuto dalla tastiera:

Proprietà Descrizione
keyCode indica il codice di scansione del tasto, cioè il codice associato al tasto di una tastiera indipendentemente dall'eventuale carattere associato
charCode indica il codice ASCII associato al tasto; questa proprietà viene valorizzata soltanto in corrispondenza dell'evento keypress
which restituisce un valore numerico che identifica il tasto premuto sia che si tratti di un tasto alfanumerico che non alfanumerico; il valore restituito è una combinazione delle proprietà keyCode e charCode
shiftKey valore booleano che indica se è stato premuto il tasto SHIFT
ctrlKey valore booleano che indica se è stato premuto il tasto CTRL
altKey valore booleano che indica se è stato premuto il tasto ALT
metaKey valore booleano che indica se è stato premuto il tasto meta (tasto Windows sui sistemi operativi Microsoft o tasto Command su Mac)

Vediamo qualche esempio di utilizzo di questi eventi per gestire l'input da tastiera.

Esempi

Il seguente codice limita a dieci il numero di caratteri ammessi in una casella di testo:

var txtInput = document.getElementById("txtInput");  
txtInput.onkeypress = function(e) {
	if (e.target.value.length >= 10) e.preventDefault();
}

Abbiamo utilizzato il metodo preventDefault() per inibire il comportamento predefinito del browser dopo il decimo carattere, cioè l'aggiunta del nuovo carattere alla stringa già visualizzata sulla casella di testo.

Il seguente esempio fa in modo da consentire esclusivamente l'immissione di caratteri numerici:

txtInput.onkeypress = function(e) {   
	var charCode = e.which;
	if (charCode < 48 || charCode > 57) e.preventDefault();
}

In questo caso abbiamo individuato il codice del carattere tramite la proprietà which dell'evento ed inibito l'immissione di caratteri non numerici.

Possiamo anche modificare il valore dell'input, ad esempio convertirlo in maiuscolo, come mostrato nel seguente esempio:

txtInput.onkeypress = function(e) {   
	var charCode = e.which;
	var char;
	if (charCode != 0) {
		char = String.fromCharCode(charCode);
		e.target.value = e.target.value + char.toUpperCase();
		e.preventDefault();
	}
}

Nell'esempio convertiamo il codice del carattere nella corrispondente stringa tramite il metodo fromCharCode() e appendiamo la sua versione in maiuscolo al valore corrente della casella di testo. L'immancabile chiamata a preventDefault() evita la visualizzazione del carattere minuscolo sulla casella.

Combinazioni di tasti

Possiamo associare ad un elemento combinazioni di tasti che hanno un comportamento speciale. Ad esempio, possiamo fare in modo che alla combinazione di tasti CTRL+D corrisponda la rimozione del testo inserito in una casella di testo, come mostrato dal seguente esempio:

txtInput.onkeydown = function(e) {
	if (e.keyCode == 68 && e.ctrlKey) {
		e.target.value = "";
		e.preventDefault();
	}
}

In questo caso sfruttiamo l'evento keydown, dal momento che la combinazione di tasti non produce un carattere. Se il tasto premuto è quello corrispondente alla lettera D ed è stato contemporaneamente premuto il tasto CTRL, allora eliminiamo il contenuto della casella di testo. Ancora una volta è importante inibire l'eventuale comportamento predefinito del browser, dal momento che diversi browser associano alla combinazione di tasti CTRL+D l'inserimento della pagina corrente nei bookmark.

Ti consigliamo anche