Nella mia pagina HTML c'è un campo di testo di input. Voglio inserire solo la chiave numerica e la freccia sinistra/destra sulla tastiera. Ho provato il seguente codice JavaScript ma ho riscontrato un problema.problema keyCode - Impossibile impedire l'immissione del carattere%
<input onkeypress="return allowNumberOnly(event)" />
function allowNumberOnly(event) {
event = event || window.event;
var charCode = (event.which) ? event.which : event.keyCode;
//keyCode 48-57 represent the number 0-9
//keyCode 37,39 represent the Left and Right arrow
//keyCode 46 represent the Delete key
//keyCode 8 represent the Backspace key
return charCode == 37 || charCode == 39 || charCode == 46 || charCode == 8
|| (charCode >= 48 && charCode <= 57);
}
Dopo aver testato questo codice, ho trovato un problema che il keyCode della freccia sinistra e% carattere speciale sono entrambi 37. Quindi non posso impedire all'utente di entrare carattere% frattempo permettendo la freccia sinistra. Non ho idea del perché questo accada. Ho sempre pensato che il codice chiave dovesse essere unico per ogni tasto della tastiera. Ho pensato di usare onkeyup invece di onkeypress. Ma l'onkeyup consentirebbe all'utente di inserire prima il carattere non valido, quindi rimuovere dal testo di input. Questo comportamento non è quello che voglio. Qualsiasi suggerimento sarebbe apprezzato.
Ho eseguito il debug del codice in FireFox e ho trovato la seguente differenza.
1. Se entra%, event.which == 37 e event.keyCode == 0
2. Se entra Freccia sinistra, event.which == 0 e event.keyCode == 37
Il problema sembra essere risolto utilizzando questa differenza. Continuerò a provare in IE e Chrome.
Fiddle: http://jsfiddle.net/gW6k3/ – JJJ