Я пытаюсь очистить ввод, когда пользователь нажимает запятую (,). Итак, я сделал следующее: на (keypress) я бы проверил keyCode, и если бы это была запятая, я бы очистил ввод, установив для него значение input.value = ''.
HTML:
<input type = "text" #elem (keypress) = "clearInput($event)">
Код:
@ViewChild( 'elem' ) public element;
clearInput( e: KeyboardEvent ) {
if ( e.keyCode === 44 ) {
this.element.nativeElement.value = '';
} else {
console.info('Not a comma');
}
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Просто return false, если нажата запятая:
class HomeComponent {
@ViewChild('elem') public element;
clearInput(e: KeyboardEvent) {
if (e.keyCode === 44) {
this.element.nativeElement.value = '';
return false;
} else {
console.info('Not a comma');
}
}
}
Вам нужно сделать 2 небольших изменения:
keyup, чтобы получить последний набранный ключ и включить его в значение inpute.key === ',' в состоянии ifВот рабочий JSFIDDLE
Добавьте preventDefault() в свой код clearInput, как показано ниже:
clearInput (e: KeyboardEvent) {
if (e.keyCode === 44) {
e.preventDefault(); // <-- Here
this.element.nativeElement.value = '';
} else {
console.info('Not a comma');
}
}
Вы можете добавить некоторые пояснения: вставка запятой будет запускаться тем же событием "keyup", что и ваш код. Но браузер должен сначала запустить ваш код, поскольку ваш слушатель не является пассивным (он может предотвратитьDefault () или вернуть false), поэтому событие нажатия клавиши сначала запустит ваш слушатель (очистите поле), а затем слушатель по умолчанию (вставив запятую в пустое поле). Другими решениями могут быть keyUp или отметка вашего слушателя пассивный. - Но preventDefault () наиболее идиоматичен для вашего случая.