Я столкнулся с какой-то ошибкой, которую я считаю с angular и chrome, и я не совсем уверен, в чем заключается решение, мое угловое приложение имеет пользовательские элементы управления вводом, и эти входы делают некоторые вещи в фокусе (focus)="someEvent($event)
. Эти входные данные являются полями имени пользователя и пароля, поэтому Chrome хранит значения. При повторной загрузке страницы Chrome будет применять сохраненные значения, если пользователь щелкает в другом месте экрана (НЕ на компонентах ввода), оба компонента ввода запускают событие focus.
Я мог бы понять, произошло ли это при загрузке страницы, поскольку Chrome может циклически переключаться между входами и применять сохраненные значения, однако это происходит после первого щелчка мышью в любом месте страницы.
Есть ли способ интерпретировать, что эти события фокусировки были вызваны функцией автозаполнения, а не фокусировкой пользователя на вводе вручную?
У меня есть некоторый код для этих событий, который делает event.target.select()
, чтобы выделить весь текст, и, как ни странно, 2 входа заканчивают тем, что застревали в цикле фокусировки. Первый фокусируется, затем второй, затем первый, затем второй навсегда, пока пользователь не нажмет клавишу Tab.
HTML:
<input [ngClass]="inputClass" [type]="this.type" [readOnly]="this.readonly || (this.ParentPanel && this.ParentPanel.readonly)" [ngStyle]="inputStyle" [disabled]="disabled || (this.ParentPanel && this.ParentPanel.disabled)" [(ngModel)]="value" (change)="Event_change($event)" (keyup)="Event_keyup($event)" (keydown)="Event_keydown($event)" (focus)="Event_focus($event)" maxlength="512"/>
TS:
Event_focus(event) {
console.log('focus event' , event);
if (this.selectAllOnFocus) {
setTimeout(() => { // required to work with Edge (OnFocus happens before some browser properties are set)
event.target.select();
});
}
this.OnFocus.emit(event);
}
Спасибо.