¿Cuál es la forma correcta de filtrar valores numéricos para un campo de texto?

Estoy trabajando en un campo de texto trabajando con el tipo de validación que no le permitiría ingresar valores que no sean numéricos. Como tal, mi código inicial parecía bastante simple y similar a esto:

$(textField).onKeyPress(function(e) {
    if (e.which < 48 && e.which > 57)
        e.preventDefault();
});

Esto es bastante sencillo, pero convierte que (en la última versión de todos los navegadores) Firefox hará que esto también impida el movimiento con las teclas de flecha y las teclas de eliminación / retroceso, mientras que los otros navegadores no.

Mirando a mi alrededor, descubrí que también tendría que buscar estas claves y verificar las diferentes propiedades expuestas en ele Referencia del evento.

Mi código final se ve algo como esto:

$(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();
});

Sin embargo, parece que esto es demasiado para resolver un problema bastante simple, ya que simplemente evita lo no numérico.

¿Qué estoy haciendo mal? ¿Cuál es la mejor práctica en términos de este tipo de validación?

Respuestas a la pregunta(3)

Su respuesta a la pregunta