Javascript 检测输入返回与被动形式中的按钮点击
我正在用Angular构建一个反应式表单,上面有3个提交按钮Javascript 检测输入返回与被动形式中的按钮点击,javascript,angular,angular-reactive-forms,Javascript,Angular,Angular Reactive Forms,我正在用Angular构建一个反应式表单,上面有3个提交按钮 <form [formGroup]="sessionForm" (submit)="submitSession($event)"> <div class="row"> <label> <span>Title</span> <input type="text" formControlName="tit
<form [formGroup]="sessionForm" (submit)="submitSession($event)">
<div class="row">
<label>
<span>Title</span>
<input type="text" formControlName="title" [class.required]="markRequired.indexOf('title') >= 0">
</label>
</div>
... more fields ...
<div *ngIf="!admin" class="row">
<button type="submit" (click)="setBtnClicked('submit')" class="btn btn-primary">Submit</button>
</div>
<div *ngIf="admin" class="row">
<button type="submit" (click)="setBtnClicked('save')" class="btn btn-primary">Save</button>
<button type="submit" (click)="setBtnClicked('approve')" class="btn btn-success">Save and approve</button>
<button type="submit" (click)="delete($event, false)" [hidden]="confirmDelete" class="btn btn-danger">Delete</button>
<button type="submit" (click)="delete($event, true)" [hidden]="!confirmDelete" class="btn btn-danger">Are you sure?</button>
</div>
<div [hidden]="!showSuccess" class="msgBox msgBox-success">Your session has been submitted! It will need to be approved before it is listed.</div>
</form>
但是,当有人点击输入返回时,我注意到this.btnClicked
的值等于表单中的第一个按钮
我不知道如何跟踪用户何时点击回车键或何时点击按钮,因此我可以做出不同的响应,或者我的结构是否错误。我想在任何提交上触发
submitSession
功能,无论是返回还是按钮。我确实尝试向按钮添加formControl,但失败了。因为您使用的是表单,在输入上按enter键应该会运行绑定到表单的submitSession()
方法,但它可能默认为表单上的第一个提交按钮。从按钮中删除submitSession()
以及type=“submit”
可能会阻止基于enter的表单提交。这样,用户就需要实际单击一个按钮来触发某些内容
同样在传递事件的方法中,以下代码将检测事件是否由enter键触发
if (event.keyCode === 13) {
console.log('you just clicked enter');
}
我试图从submit事件中检查
keyCode
,但结果未定义。另外,单击和submitSession
都会运行(先单击,然后是submitSession
)。您是否尝试过从按钮中删除submitSession()
和type=“submit”
?我会试一试,尽管我认为两者在语义上都是正确的?这不是Angular的目标吗?是的,但是您有多个提交按钮,我相信这就是问题的根源。只有第一个会被执行,这是有道理的。也许这就是问题所在?也许另一个解决方案是一个更好的主意。。。
if (event.keyCode === 13) {
console.log('you just clicked enter');
}