Я использую Vue. JS (Bootstrap - Vue) для создания формы, мой ввод имеет следующий код:
<b-form-input
v-mask="'####'"
number
type="number"
no-wheel
pattern="[0-9]"
step="1"
:class="{ 'hasError': $v.form.dobYear.$error }"
v-model.number="$v.form.dobYear.$model"
class="form-input"
name="year"
id="year"
maxlength="4"
min="1900"
max="2020"
@keydown="filterKey"
></b-form-input>
Когда пользователь нажимает, я хочу для предотвращения ввода более 4 символов это работает, но при тестировании я вижу, что точки и тире и другие подобные символы также могут быть добавлены во вход и игнорирует максимум 4 символа . Как я могу обновить следующий код, чтобы ничего не добавлялось, кроме цифр, к моему входу на мобильном телефоне. Я пытаюсь определить, нажата ли какая-либо из этих нежелательных клавиш, а затем предотвратить действие по умолчанию. (Я проверял на Android Chrome)
filterKey(e) {
const value = e.target.value;
const key = e.key;
console.log(value, this.amount);
if (String(value).length === 4) {
//check if a number is pressed after 4 have been entered
if (!isNaN(Number(key))) {
e.preventDefault();
return;
} else if (key == 190 || key == 189 || key == 107 || key == 69) {
e.preventDefault();
return;
}
}
}