【问题标题】:Angular: Submit method executed by clicking another buttonAngular:通过单击另一个按钮执行的提交方法
【发布时间】:2022-01-25 22:20:47
【问题描述】:

我将 Angular 与 Angular Material 组件一起使用。 因此,我添加了一个登录组件(表单),用户可以在其中输入他的电子邮件和密码。密码的输入字段在末尾有一个眼睛,使用户能够在需要时以纯文本形式显示密码。 不幸的是,通过单击眼睛按钮两次,提交方法会执行,该方法绑定到提交按钮。

简单的问题是:为什么?

模板

<form [formGroup]='loginForm' (ngSubmit)="onSubmit()">
<div>
    <mat-form-field>
        <mat-label for="email">E-Mail</mat-label>
        <input matInput type="text" formControlField="email" />
        <mat-error>
            Test
        </mat-error>
    </mat-form-field>
</div>

<div>
    <mat-form-field>
        <mat-label for="password">Password</mat-label>
        <input matInput [type]="hide ? 'password' : 'text'" formControlField="password" />
        <button mat-icon-button matSuffix class="mat-icon-button mat-button-base" (click)="hide = !hide" [attr.aria-label]="'Hide password'" [attr.aria-pressed]="hide">
            <mat-icon>{{ hide ? 'visibility_off' : 'visibility' }}</mat-icon>
        </button>
    </mat-form-field>
</div>

<button mat-raised-button color="primary" type="submit">Login</button>

组件

export class LoginComponent implements OnInit {

loginForm: FormGroup;
hide = true;

constructor(
 private formBuilder: FormBuilder
) { 
   this.loginForm = this.formBuilder.group({
   email: ['', [Validators.required, Validators.email]],
   password: ['', [Validators.required]]
 })
}

onSubmit() {
 window.alert("Login button clicked");
}

【问题讨论】:

    标签: html angular angular-material


    【解决方案1】:

    尝试添加

    type="button"

    到你的“眼睛”按钮

    这将告诉浏览器在表单内时不要将其视为提交按钮。

    【讨论】:

    • 没问题。当一个奇怪的问题有一个简单的解决方案时,这很好:)
    【解决方案2】:

    是的,添加 type="button" 后它就可以工作了。

    【讨论】:

    • 这看起来更像是对the answer 的评论,而不是新的答案。
    • 答案看起来像是对先前答案的评论
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    相关资源
    最近更新 更多