Мне нужно настроить
, чтобы он принимал только числовые символы, 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. Я ориентируюсь на недавние браузеры.
Как кто-то указал в комментариях, этот метод не позволяет пользователю «ctrl + v» вводить число. В моем конкретном случае это не является обязательным требованием для вставки числа. Но это что-то всплыло у меня в голове, пользователь все еще может щелкнуть правой кнопкой мыши> скопировать какой-то текст во вводе, и в этом случае это может быть что угодно. Чем больше я об этом думаю, тем больше мне кажется, что мне понадобится событие keydown
для обработки вкладок и стрелок, и другое событие для обработки самого ввода.
Здесь много красивых ответов, но награда достается mrtsherman за использование событий input
и propertychange
.Я буду использовать комбинацию этого ответа для числовой проверки плюс событие keyCode
, как и раньше, для специального использования стрелок, табуляции и клавиш ввода.