Я пытаюсь написать директиву, которая ограничивает пользователя вводить только числовые символы в поле ввода текста.
@Directive({
selector: '[numericControl]'
})
export class NumericControlDirective {
contructor(
private el: ElementRef,
) {}
@HostListener('input', ['$event'])
onInput(e: any) {
if (e.which < 48 || e.which > 57) {
e.preventDefault();
}
}
}
Применение
<input type = "text" placeholder = "Volume" numericControl />
Но это не работает, кто-нибудь сталкивался с этой проблемой?





Используйте тип события клавиатуры - keydown или keypress:
@HostListener('keydown', ['$event'])
onInput(e: any) {
if (e.which < 48 || e.which > 57) {
e.preventDefault();
}
}
@popStart keydown мешает мне даже использовать клавиши со стрелками, backspace и delete, поэтому я меняю его на keypress, ваша идея по-прежнему отлично работает
@ Yanis-git да, большое спасибо, но это не в моем случае :)
я понял, приятно видеть, что вы нашли здесь свое решение :) счастливого кодирования.
Вы также можете использовать
@HostListener('keydown', ['$event']) onKeyDown(event) {
let e = <KeyboardEvent>event;
if (e.which < 48 || e.which > 57) {
e.preventDefault();
}
}
вы также можете использовать
input[type=number]на своем корпусе :), который намного лучше, потому что на мобильном телефоне / планшете будет отображаться только цифровая клавиатура.