【发布时间】:2019-10-24 19:38:21
【问题描述】:
如果输入无效,我创建了一个指令来聚焦输入
import { Directive, Input, Renderer2, ElementRef, OnChanges } from '@angular/core';
@Directive({
// tslint:disable-next-line:directive-selector
selector: '[focusOnError]'
})
export class HighlightDirective implements OnChanges {
@Input() submitted: string;
constructor(private renderer: Renderer2, private el: ElementRef) { }
ngOnChanges(): void {
const el = this.renderer.selectRootElement(this.el.nativeElement);
if (this.submitted && el && el.classList.contains('ng-invalid') && el.focus) {
setTimeout(() => el.focus());
}
}
}
我确实有一个带有两个输入的反应式表单,并且我已将指令应用于两个输入
<form>
...
<input type="text" id="familyName" focusOnError />
...
<input type="text" id="appointmentCode" focusOnError />
...
</form>
提交表单后它工作正常,但我正在努力实现以下目标:
预期结果: - 提交表单后,如果两个输入都无效,则只关注第一个。
当前结果: - 如果两个输入都无效,则在提交表单后,第二个获得焦点。
我不知道如何指定“仅当它是第一个孩子时才这样做”,我已经尝试使用指令的选择器但没有运气。
有什么想法吗?
非常感谢。
【问题讨论】:
-
这是我认为您的表单应该负责关注字段而不是字段本身的地方。因为它更有意义。取消焦点的唯一方法是让输入字段了解其他字段,这没有多大意义
-
@Guillermo,我改进了我的答案,将指令应用于表单
标签: javascript angular angular-reactive-forms angular-forms angular-validation