Jaki jest właściwy sposób filtrowania wartości liczbowych w polu tekstowym?

Pracuję nad polem tekstowym działającym z walidacją, która nie pozwala na wprowadzanie innych wartości niż liczbowe. Tak więc mój początkowy kod wyglądał na dość prosty i podobny do tego:

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

Jest to dość oczywiste, ale okazuje się, że (w najnowszej wersji wszystkich przeglądarek) Firefox sprawi, że to również uniemożliwi ruch za pomocą klawiszy strzałek i klawiszy usuwania / cofania, podczas gdy inne przeglądarki nie.

Rozejrzałem się, że muszę także sprawdzić te klucze i sprawdzić różne właściwości wystawione we odwołanie do wydarzenia.

Mój ostatni kod wygląda mniej więcej tak:

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

Jednak wydaje się, że jest to zbyt wiele, aby rozwiązać dość prosty problem, po prostu zapobiegając nieliczbowym.

Co ja robię źle? Jaka jest najlepsza praktyka w zakresie tego rodzaju walidacji?

questionAnswers(3)

yourAnswerToTheQuestion