Для удобного интерфейса, как правило, лучше, чтобы проверить на основе фактического значения входных данных, поэтому не используйте charCode, используйте значение на вход в. Для этого простое регулярное выражение подходит:
if (/\D/.test(value)) {
// a non–digit was entered
}
Это часто лучше, чтобы проверить, когда пользователь заканчивает вход, например, для банковского дела я могу скопировать и вставить остаток моей кредитной карты как «1,203.43», а затем удалить запятую. Затем поле проверяется, когда я оставляю его (onblur или onsubmit) с подходящим экранным сообщением, оставляя меня исправить, если это неправильно.
Но в некоторых случаях это также подходит для использования keyup или другого подходящего события.
Таким образом, в случае ввода, который должен иметь только цифры, вы могли бы сделать что-то вроде следующего:
function validate(el) {
if (el.classList.contains('numsOnly')) {
document.getElementById(el.id + 'Err').innerHTML = /\D/.test(el.value)? "Must contain only digits" : '';
}
}
.screenHint {font: sans-serif; font-size: 80%; color: #999999}
<label for="aNum">A number:<input name="aNum" id="aNum" class="numsOnly"
onblur="validate(this)" onkeyup="validate(this)" onpaste="validate(this)"
placeholder="1234"></label><span class="screenHint">Digits only</span><br>
<span style="color:red; background-color: white;" id="aNumErr"></span>
Конечно, вы, вероятно, добавить слушателей динамически и иметь гораздо более обширный набор валидаций, но приведенное выше показывает некоторые из принципов.
Спасибо за ответ! Как удалить «незаконные» символы в событии «onpaste»? – Jessica
См. Мой отредактированный ответ. Я не понимал, что «onpaste» уволен до того, как текст действительно вставлен, поэтому вы не можете (легко) получить дескриптор прикрепленного текста. 'oninput' может быть лучшим вариантом в вашем случае. – Riaz