Я бы написал для этого специальную директиву. Вдохновленный этим ответом . Директива может быть помещена в тэг, мы используем HostListener
для прослушивания keyup.enter
и, если существует следующий элемент, мы перемещаем фокус на него.
Нам нужно внести некоторые изменения в то, как вашФорма отправлена, так как ngSubmit
будет вызываться при каждом нажатии Enter. Поэтому я бы удалил это из тега формы, установил кнопку на type="button"
и вместо этого прикрепил к ней событие щелчка, чтобы вызвать logForm()
.
Так что в целом это то, что я делаю:
<form focusDir>
<!-- .... -->
<button ion-button type="button" block (click)="logForm()">Add Todo</button>
Директива:
@Directive({
selector: "[focusDir]"
})
export class FocusDirective {
constructor() {}
@HostListener("keyup.enter") onKeyupEnter() {
var nextEl = this.findNextTabStop(document.activeElement);
nextEl.focus();
// or try for ionic 4:
// nextEl.setFocus();
}
findNextTabStop(el) {
var universe = document.querySelectorAll(
"input, button, select, textarea, a[href]"
);
var list = Array.prototype.filter.call(universe, function(item) {
return item.tabIndex >= "0";
});
var index = list.indexOf(el);
return list[index + 1] || list[0];
}
}
Затем отметьте эту директиву в массиве declarations
в вашем ngModule.
STACKBLIZ