javascript - event.stopPropagation() 不适用于表单

标签 javascript angular angular-forms

我有一个简单的 Angular 形式,例如:

  <form [formGroup]="form">
    <div>
      <input type="text" (keydown.enter)="onEnterPerssed($event)" [formControl]="myList" formControlName="myList">
    </div>
   <br>

    <p *ngIf="sendData" class="mt-1">Data send successfully</p>

    <button type="submit" (click)="onSubmit(form)" class="btn btn-block btn-primary mt-2" style="width: 100px;" [disabled]="form.invalid">
    Submit
    </button>
  </form>
export class AppComponent implements OnInit {
  sendData: boolean = false;

  form: FormGroup;
  isDisabled: boolean = true;
  myList: FormControl = new FormControl('sdfsdf', [Validators.required  ]);

  constructor(private fb: FormBuilder) { }

  ngOnInit(): void {
    this.form = this.fb.group({
      myList: this.myList
    });
  }

  onSubmit(form): void {
    this.sendData = true;
    console.log('data send successfully');
  }

  onEnterPerssed(event: Event) {
    event.stopPropagation();
    console.log('asdasfasfsfafasfasf');
  }
}

当我们在输入字段上单击 Enter 时,是否有任何解决方案可以防止提交表单,而不更改按钮类型(提交 => 按钮)

最佳答案

更改 form 标记上的提交事件,并从提交按钮中删除点击事件。

<form [formGroup]="form" (ngSubmit)="onSubmit($event)">
onSubmit(event) {
    event.preventDefault();
    // logic goes here
}

ngSubmit 确保当处理程序代码抛出异常(这是提交的默认行为)并导致实际的 http post 请求时,表单不会提交。

关于javascript - event.stopPropagation() 不适用于表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59427030/

相关文章:

javascript - 如何在 12 小时格式 Ionic 3 上获得预选时间

Angular 如何默认设置单选按钮,响应式(Reactive)表单

javascript - 为什么我的 for 循环不能迭代基本对象?

javascript - 正斜杠被替换为 : %252F in AngularJS

Angular 6 如何获得另一个组件 onClick

javascript - 没有ivy如何编译库?

angular - 提交后如何重置 Angular 形式并设置默认值

forms - 形式中的形式。表单控件可以继承吗?

javascript - 将 Angular 物体绑定(bind)到 Polymer 1.0

javascript - 节点有时有多个父节点的数据集,如何以树状方式显示它? (d3.js 或类似的东西)