Aggiornamento:
l proprietà .which attualmente risulta deprecata https://caniuse.com/#feat=keyboardevent-which
Anche se è comunque supportata dalla maggior parte dei browser effettivamente in divrsi browser sembra funzionare in modi differenti.
Ho notato ad esempio che con quello script si hanno dei malfunzionamenti usando CH o IE.
In questo caso, a mio parere, dovresti separare il controllo tra i caratteri stampabili, che puoi verificare attraverso l'evento keypress e la proprietà charCode, e quelli non stampabili, che puoi controllare attraverso l'evento keydown e la proprietà keyCode.
Qui un esempio aggiornato:
Vedi se può andare.codice:<!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <title>esempio</title> </head> <body > <form action="" method="" name="vform"> <input type="text" id="showText" value="" onkeypress="controlloCarattere(event)" onkeydown="controlloTasto(event)" name="mvar" readonly><br> </form> <p id="err"></p> <script> var contenitoreErrore = document.getElementById('err'); var campo = vform.mvar; function controlloCarattere(event) { var codice = event.charCode; if ( // Se premuto tasto con codice carattere consentito: ( codice >= 48 && codice <= 57 ) // Numeri || ( codice >= 65 && codice <= 90 ) // Lettere maiuscole || ( codice >= 97 && codice <= 122 ) // Lettere minuscole ) { campo.value += String.fromCharCode(codice); // Aggiungo il carattere digitato } else { // Se premuto un tasto non consentito // Visualizzo l'errore contenitoreErrore.innerHTML="carattere non permesso"; setTimeout(function(){ contenitoreErrore.innerHTML="" },1000); } } function controlloTasto(event) { var codice = event.keyCode; if ( codice == 8 ) { // Se premuto Backspace campo.value = campo.value.slice(0, -1); // Rimuovo l'ultimo carattere } } </script> </body> </html>


Rispondi quotando