首页 > 解决方案 > 如何根据条件和在触发任何验证之前强制输入大写?

问题描述

<input #input (input)="input.value=$event.target.value.toUpperCase()">
<input oninput="this.value = this.value.toUpperCase()">

但不是我的用例,因为我不想复制我的 html 标签,因为我在这个字段上有很多配置,这会导致重复代码,我只能修改一个输入标签而不能修改另一个并引入错误。 ...因此,我不想使用这个:

<input *ngIf="uppercase" oninput="this.value = this.value.toUpperCase()">
<input *ngIf="!uppercase">

我会使用这样的东西(但这当然不起作用):

<input oninput="if ({{this.uppercase}}) { this.value = this.value.toUpperCase();} ">

演示

标签: javascripthtmlangulartypescriptinput

解决方案


经过多次测试,解决方案非常简单:

此解决方案不起作用,因为在更改之前触发了验证:

(input)="formBlock.forceUppercase ? input.value=$event.target.value.toUpperCase() : input.value=$event.target.value"

但这是有效的(在验证之前应用了更改):

html:

(input)="forceUppercaseConditionally(formControl.formControlName, $event);"

ts:

forceUppercaseConditionally(formControlName, event) {
    if (this.uppercase) {
        this.formGroup.get(formControlName).setValue(event.target.value.toUpperCase()); 
    }
}

推荐阅读