di: Stuart Langridge 19 Maggio 2008
Questa è la traduzione dell'articolo Capturing Caps Lock di Stuart Langridge pubblicato originariamente su 24 Ways il 4 dicembre 2007.
Uno degli aspetti più fastidiosi del dover ricordare le password (oltre al fatto di doverne ricordare decine) è che se abbiamo premuto e attivato accidentalmente il tasto del Blocco Maiuscole (Caps Lock), quando scriviamo la password non funzionerà e per un po' staremo lì a chiederci perché. La maggior parte dei computer ci avvisano in qualche modo se stiamo provando ad inserire una password e abbiamo attivato il Blocco Maiuscole. Non c'è ragione perché sul web non possa accadere la stessa cosa. Quello che vogliamo è un avviso piuttosto che qualcosa che interrompa quello che stiamo facendo (forse l'utente ha il Blocco Maiuscole attivato perché la sua password è in effetti in lettere maiuscole). Un qualcosa di gentile.
Ma tutto ciò non risponde alla domanda relativa al come implementare un sistema del genere. Purtroppo, attualmente non esiste un modo per verificare direttamente se il Blocco Maiuscole è attivato. C'è comunque un semplice trucchetto per aggirare l'ostacolo. Se l'utente preme un tasto ed è una lettera maiuscola e il tasto Shift non è stato premuto, allora deve aver per forza attivato il Blocco Maiuscole! Semplice.
Lo scripting del DOM consente al nostro codice di ricevere notifiche su quando un certo tasto viene premuto nel contesto di un elemento. Quando il tasto viene premuto, otteniamo il codice ASCII per quel tasto. Le lettere maiuscole, da A a Z, hanno i codici da 65 a 90. Il codice sarà dunque simile a questo:
alla pressione di un tasto
se
il codice ASCII per quel tasto è compreso tra 65 e 90 *e* se il tasto Shift è premuto
avvisa l'utente il Blocco Maiuscole è attivato, ma lascialo proseguire
end if
end keypress
Il Javascript reale è un po' più complicato perché sia la gestione degli eventi sia la cattura delle informazioni sui tasti premuti differiscono da browser a browser. Le funzioni per la gestione degli eventi sono passate ad un oggetto evento, tranne che su Internet Explorer, dove si usa l'oggetto evento globale. L'oggetto evento ha un parametro 'which' che contiene il codice ASCII del tasto premuto, tranne che su Internet Explorer, dove l'oggetto evento ha un parametro 'keyCode'. Alcuni browser memorizzano se il tasto Shift è premuto in un parametro 'shiftKey', altri in un diverso parametro. Da tutto ciò deriva il codice che segue:
keypress: function(e) {
var ev = e ? e : window.event;
if (!ev) {
return;
}
var targ = ev.target ? ev.target : ev.srcElement;
// cattura il tasto premuto
var which = -1;
if (ev.which) {
which = ev.which;
} else if (ev.keyCode) {
which = ev.keyCode;
}
// cattura lo stato del tasto Shift
var shift_status = false;
if (ev.shiftKey) {
shift_status = ev.shiftKey;
} else if (ev.modifiers) {
shift_status = !!(ev.modifiers & 4);
}
// Ora abbiamo il codice ASCII in "which",
//e lo stato del tasto Shift è true se è premuto
}
Guida Node.jsIl framework che permette di per usare V8, l'interprete JavaScript... |
Canvas, guida ai frameworkCanvas, tra gli elementi di HTML5 è forse quello di maggior impatto.... |
Guida jQuery UICreare siti ricchi e dinamici con jQuery UI, il progetto ufficiale... |
Ogni martedì, direttamente nella tua e-mail: guide, articoli, script, novità e approfondimenti tecnici su JavaScript.
Iscriviti alla newsletter
|
|
Corso Webmaster base18 Giugno 2012 a Milano |
|
|
Corso Google AdWords Base25 Giugno 2012 a Milano |
|
|
Corso JQuery e Ajax per Webmaster03 Luglio 2012 a Milano |
|
|
Corso Google AdWords Base05 Giugno 2012 a Roma |
|
|
Corso Webmaster base11 Giugno 2012 a Roma |