Im scrivendo una certa logica in JavaScript utilizzando jQuery, dove devo controllare il contenuto di ingresso nei confronti di un modello REGEX ex:Il codice chiave JavaScript 46 è il tasto funzione DEL o il segno del punto (.)?
"^[a-zA-Z0-9_]*$" //Alpha-numeric and _
La logica è quasi fatto, ho solo un piccolo problema filtrando il tasto funzione DEL, la mia logica è questa:
var FunctionsKey = new Array(8, 9, 13, 16, 35, 36, 37, 39, 46);
function keypressValidation(key) {
if (config.regexExp != null) {
if ($.inArray(key, FunctionsKey) != -1) {
return true;
}
else {
var keyChar = String.fromCharCode(key);
return RegexCheck(keyChar);
}
}
return true;
}
Se il KeyCode è uno di quelli nella matrice, ho lasciato passare, se non ottengo il carattere e lo confrontiamo contro il rEGEX. Il problema è: in alcuni browser il DEL e '.' (segno di periodo) hanno la stessa chiave Codice 46.
Quindi c'è una logica migliore per filtrare i tasti funzione o devo scrivere una condizione per quel caso, magari rimuovendo il 46 dall'array e provate a convertirlo in char e se è (.) lasciarlo andare alla funzione Regex se non lasciarlo passare? L'altra domanda sarà ci sono codici chiave più condivisi in alcuni browser?
EDIT: La mia soluzione suggerita non funzionerà, perché non importa quale tasto l'utente ha premuto (DEL o periodo) ottengo sempre come CHAR almeno su Opera e FF = (
Proverò a provare, thx – JOBG
nota: ci sono due "." tasti su molte tastiere, provali entrambi, (190 sembra che potrebbe essere un decimale se ricordo correttamente da cellule cerebrali morte :) Puoi aggiungere un avviso(); per scoprire esattamente –
ok, il primo che ho notato è che usi keydown anziché keypress, e sembra che ci sia un diff in quale evento scegliamo, attualmente sto usando keypress e il risultato con il metodo sono (.) = 0 (FF) - 46 (Opr), DEL = 46 nell'altra mano il keydown dà (.) = 190, DEL = 46 per entrambi i browser, perché le differenze? – JOBG