javascript (jquery) числовой ввод: keyCode для '3' и '#' одинаковы

Мне нужно настроить , чтобы он принимал только числовые символы, backspace, удалить, ввести, вкладки и стрелки.

Там много примеров, я начал с чего-то вроде этого:

function isNumericKeyCode (keyCode){
    return ( (keyCode >= 48 && keyCode <= 57) //standard keyboard
           ||(keyCode >= 96 && keyCode <= 105)) //Numpad
}

$('#myTextBox').keydown(function(e){
         var handled = true;
         var keyCode = e.keyCode;
         switch(keyCode){
            //Enter and arrows
            case 13:
            case 37:
            case 38:
            case 39:
            case 40:
               doSomethingSpecialsWithThesesKeys();
               break;
            default:
               handled = false;
               break;
         }

         if (  !handled
            && keyCode !== 8 //backspace
            && keyCode !== 9 //tab
            && keyCode !== 46 //del
            && !isNumericKeyCode(keyCode)){

            handled = true;
         }

         return handled;
});

Все работало отлично, пока я не нажал клавишу "#". На моей французско-канадской клавиатуре «#» имеет свою собственную клавишу (без сдвига), которая возвращает keyCode 51, такой же, как цифра «3».

Я думаю, что на американской клавиатуре "#" получается нажатием shift + 3, возможно, поэтому у них одинаковый код клавиши.

Теперь я понимаю, что мне также нужно работать с клавишами Shift и Alt, но это уже другая история.

Он работает по-другому с событием нажатия клавиши jquery, которое предлагает свойство charCode, но я сначала не использовал его из-за того, что в документации говорится:

поскольку событие нажатия клавиши не распространяется по любой официальной спецификации, фактическое поведение, возникающее при его использовании, может отличаться в разных браузерах, версии браузеров и платформы.

Кроме того, в этом случае мне понадобится обходной путь для обработки вкладок, стрелок и других специальных клавиш, поскольку они не предоставляют charCode.

Итак, вопрос: есть ли способ разрешить только некоторые специфические символы с помощью события нажатия клавиши? И это будет работать независимо от раскладки клавиатуры?

В качестве побочного задания: какие браузеры могут вызывать проблемы с событием нажатия клавиши? Я имею в виду, что в настоящее время мне все равно, поддерживает ли мой веб-сайт IE6. Я ориентируюсь на недавние браузеры.

Edit


Как кто-то указал в комментариях, этот метод не позволяет пользователю «ctrl + v» вводить число. В моем конкретном случае это не является обязательным требованием для вставки числа. Но это что-то всплыло у меня в голове, пользователь все еще может щелкнуть правой кнопкой мыши> скопировать какой-то текст во вводе, и в этом случае это может быть что угодно. Чем больше я об этом думаю, тем больше мне кажется, что мне понадобится событие keydown для обработки вкладок и стрелок, и другое событие для обработки самого ввода.

Edit2


Здесь много красивых ответов, но награда достается mrtsherman за использование событий input и propertychange .Я буду использовать комбинацию этого ответа для числовой проверки плюс событие keyCode , как и раньше, для специального использования стрелок, табуляции и клавиш ввода.

9
задан Johnny5 18 January 2012 в 13:23
поделиться