Qual é a maneira correta de filtrar valores numéricos para um campo de texto?
Estou trabalhando em um campo de texto trabalhando com o tipo de validação que não permite que você insira valores diferentes dos numéricos. Assim, meu código inicial parecia bastante simples e semelhante a isso:
$(textField).onKeyPress(function(e) {
if (e.which < 48 && e.which > 57)
e.preventDefault();
});
Isso é bastante claro, mas vira que (na versão mais recente de todos os navegadores) o Firefox fará isso também impedir o movimento com as teclas de seta e as teclas delete / backspace, enquanto os outros navegadores não.
Olhando em volta, descobri que precisaria também verificar essas chaves e verificar as diferentes propriedades expostas noe
referência de evento.
Meu código final é algo como isto:
$(textField).onKeyPress(function(e) {
var code = e.which || e.keyCode;
if (code > 31 // is not a control key
&& (code < 37 || code > 40) // is not an arrow key
&& (code < 48 || code > 57) // is not numeric
&& (code != 46) // is not the delete key
)
e.preventDefault();
});
No entanto, isso parece ser muito para resolver um problema bastante simples como apenas evitar não-numérico.
O que estou fazendo de errado? Qual é a melhor prática em termos desse tipo de validação?