Ответ 1
Коды клавиш разные. Клавиатура 0-9 - Keycode 96
- 105
Ваш оператор if
должен быть:
if ((e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode >= 96 && e.keyCode <= 105)) {
// 0-9 only
}
Имеются ли в цифрах на цифровой клавиатуре разные коды клавиш, чем цифры в верхней части клавиатуры?
Вот некоторый JavaScript, который должен запускаться в событии keyup, но только если код ключа находится между 48 и 57. Вот код:
$('#rollNum').keyup(function(e) {
if(e.keyCode >= 48 && e.keyCode <= 57) { //0-9 only
var max = 15;
var textLen = $(this).val().length;
var textLeft = max - textLen;
. . .
Моя проблема в том, что этот код работает только в ответ на цифры, введенные в верхней части клавиатуры, но не работает в ответ на цифры, введенные с цифровой клавиатуры.
Я думаю, что ответ должен состоять в том, что цифровая клавиатура имеет разные значения KeyCode, но как узнать, что это такое?
Коды клавиш разные. Клавиатура 0-9 - Keycode 96
- 105
Ваш оператор if
должен быть:
if ((e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode >= 96 && e.keyCode <= 105)) {
// 0-9 only
}
******************* Не используйте KEYCODE !!!! **************** **
Проблема с keyCode состоит в том, чтобы избежать сочетания клавиш с цифрами на верхней части клавиатуры, мы должны добавить проверку на клавиши "Shift" и "Alt" избегать специальных символов, таких как e @& "{}...
Самое простое решение - преобразовать e.key в число и проверить, дает ли преобразование NaN!
let key = Number(e.key)
if (isNaN(key) || e.key===null) {
console.log("is not numeric")
}
else {
console.log("is numeric")
}
Будьте осторожны, если e.key равен нулю, он дает 0 0!
Number(5) // => 5
Number('5') // => 5
Number(null) // => 0
Number('chars') // => NaN
Number(undefined) // => NaN
Вы можете просто запустить
$(document).keyup(function(e) {
console.log(e.keyCode);
});
чтобы увидеть коды нажатых клавиш в консоли браузера.
Или вы можете найти коды клавиш здесь: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode#Numpad_keys
keyCode отличается для чисел на цифровой клавиатуре и цифрах поверх клавиатуры.
keyCodes:
цифры на клавиатуре (0 - 9): 48 - 57
на цифровой клавиатуре (0 - 9): 96 - 105
Условие JavaScript:
if((e.keyCode >= 48 && e.keyCode <=57) || (e.keyCode >= 96 && e.keyCode <=105)) {
// entered key is a number
}
Ссылка для всех кодов клавиш (с демо): http://www.codeforeach.com/javascript/keycode-for-each-key-and-usage-with-demo
Для тех, кто хочет решения CTRL + C, CTRL-V, перейдите по ссылке:
/**
* Retrieves the number that was pressed on the keyboard.
*
* @param {Event} event The keypress event containing the keyCode.
* @returns {number|null} a number between 0-9 that was pressed. Returns null if there was no numeric key pressed.
*/
function getNumberFromKeyEvent(event) {
if (event.keyCode >= 96 && event.keyCode <= 105) {
return event.keyCode - 96;
} else if (event.keyCode >= 48 && event.keyCode <= 57) {
return event.keyCode - 48;
}
return null;
}
Использует логику первого ответа.
Ответ @.A. Морель, я считаю, является лучшим, легким для понимания решением с небольшой площадью. Я просто хотел добавить сверху, если вы хотите меньший объем кода, это решение, являющееся модификацией Morel, хорошо работает, так как не допускает использование букв любого рода, включая вводимый пресловутый символ 'e'.
function InputTypeNumberDissallowAllCharactersExceptNumeric() {
let key = Number(inputEvent.key);
return !isNaN(key);
}
Чтобы добавить к другим ответам, обратите внимание:
keyup
и keydown
отличаются от keypress
String.fromCharCode()
для получения фактической цифры из keyup
, вам необходимо сначала нормализовать keyCode
.Ниже приведен пример самодокументирования, который определяет, является ли ключ числовым, а также каким номером он является (например, используется функция range
из lodash
).
const isKeypad = range(96, 106).includes(keyCode);
const normalizedKeyCode = isKeypad ? keyCode - 48 : keyCode;
const isDigit = range(48, 58).includes(normalizedKeyCode);
const digit = String.fromCharCode(normalizedKeyCode);
Вы можете использовать это, чтобы легко найти коды ключей:
$(document).keyup(function(e) {
// Displays the keycode of the last pressed key in the body
$(document.body).html(e.keyCode);
});