#javascript #dom-events #addeventlistener
#javascript #dom-события #addeventlistener
Вопрос:
В моем внешнем JS-файле у меня есть следующий код для отключения нечислового ввода пользователем:
function numericInput(evt) {
var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode > 48 || charCode < 57)
{
return true;
}
else
{
return false;
}
}
Я хочу добавить эту функцию через addEventListener
и я сделал следующее:
document.getElementById("myTextbox").addEventListener("keypress", function (evt) {
numericInput(evt);
}, false);
Что я делаю не так?
Комментарии:
1. Почему важно, что возвращает эта функция, что вы пытаетесь сделать?
2. @adeneo Я хочу запретить пользователю использовать нечисловые клавиши, если они вводят «a», что в текстовом поле ничего не происходит
3. Попробуйте заменить
return false
наevt.preventDefault()
Ответ №1:
Часть charCode > 48 || charCode < 57
в вашем if-операторе фактически всегда возвращает true . Это потому, что каждое число больше 48 или меньше 57. Я думаю ||
, что должно было быть amp;amp;
. Другое дело, наименьший код ключа для числа равен 48, который не включается, если вы заменяете ||
на amp;amp;
. Самый большой код ключа для числа, 57, не является ни тем, ни другим.
Я думаю, что ваш код будет работать правильно, если вы замените charCode > 48 || charCode < 57
на charCode >= 48 amp;amp; charCode <= 57
.
РЕДАКТИРОВАТЬ: как упоминалось ранее, вы должны заменить return false
на evt.preventDefault()
.
Эта функция должна работать:
function numericInput(evt) {
var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode >= 48 amp;amp; charCode <= 57)
{
return true;
}
else
{
evt.preventDefault();
}
}
/* OR: */
function numericInput(evt) {
var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode < 48 || charCode > 57) evt.preventDefault();
}