我有一个带有按钮#myform
的响应式表单("foo"
),按钮(click) = myform.submit()
附加在按钮上,因此该表单仅在单击该按钮时提交,而不在{ {1}}个事件。组件侦听Enter
事件,并在这种情况下分派Enter
,并且FormControl都具有blur
,因此{updateOn: 'blur'}
事件触发更新(即blur
,等)。
我的问题是:如果我将数据键入valueChanges
(或在Input
中选择一个项目)而没有从元素中击出Select
或Enter
,然后单击Tabbing
,即"foo"
按钮,似乎单击"Submit"
按钮只会导致"foo"
事件,而不会触发表单提交(通过blur
)。也就是说,myform.submit
被submit
事件“吞噬”。
如何进行设置,以便如果我不在某个元素中blur
或Enter
,并立即单击Tab
,则该元素将通过{{ 1}}事件,然后还会提交表单吗?
我尝试了以下操作:1.首先处理"foo"
,然后尝试以编程方式调用组件中的blur
(通过blur
访问myform.submit()
),以及2.在模板视图中添加Form
侦听器。在这一点上,我什至没有这个@ViewChild
调用来进行编译,到目前为止,我尝试过的所有方法似乎都没有用。
原始代码(简化)如下:
模板(blur)= (submitNow && setTimeout(()=>myform.submit(),50)
setTimeout
组件details.component.html
<form #myform [formGroup]="form" method="POST" action="http://localhost:3000/users/{{userID}}/details">
<ng-container *ngFor="let sec of datArr">
<ng-container *ngFor="let row of sec; let i = index">
<input type="text"
[appTag]="row[datColEnum.tabCol]"
(keydown.enter)="onEnter($event)"
tabindex = "{{row[datColEnum.tabCol]}}"
name="{{row[datColEnum.controlNameCol]}}" value="{{row[datColEnum.valueCol]}}"
formControlName="{{row[datColEnum.controlNameCol]}}"/>
</ng-container>
</ng-container>
<button name="foo" type="button" (click)="myform.submit()">Submit</button>
</form>