作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在遍历一组键值以创建一个复选框列表,每个复选框都有一个同级禁用输入。选中每个复选框后,同级输入文本字段将被启用并且是必需的。在此 View 中,有一个“上一个”和“下一个”按钮,如果用户选择了一个复选框然后未在其所需的同级输入中输入任何内容,则应禁用“下一个”按钮。我几乎可以正常工作,但是一旦用户选中该框,“下一步”按钮就应该被禁用,因为这意味着他们没有在所需的文本输入中输入任何内容。现在,“下一步”按钮只有在用户选中复选框、关注同级输入然后离开而不输入时才会被禁用。
我的 HTML...
<div *ngFor="let promotion of promotionOptions; let i = index">
<div class="col-md-6 input-container radio-label">
<mat-checkbox [checked]="!promotion.key" (change)="promotion.key = !promotion.key">
{{ promotion.name }}
</mat-checkbox>
</div>
<mat-input-container>
<input matInput [disabled]="promotion.key" placeholder="Cost" name="promotionCost{{i}}" #promotionCost="ngModel" [ngModel]="" (keyup)="promotionCostInput($event.target.value)"
[required]="!promotion.key" type="number">
<div *ngIf="promotionCost.errors && (promotionCost.dirty || promotionCost.touched)" class="alert alert-danger cost-alert">
<div [hidden]="!promotionCost.errors.required">Please enter the checked promotion's cost</div>
</div>
</mat-input-container>
</div>
<div class="clearfix"></div>
<div class="button-container">
<button class="main-btn dark icon-left" (click)="updateStep(1)"><i class="fa fa-angle-left"></i>Previous</button>
<button class="main-btn icon-right" (click)="updateStep(3)" [disabled]="!promotionCostValid">Next<i class="fa fa-angle-right"></i></button>
</div>
以及我在 .ts 文件中使用的禁用“下一步”按钮的方法:
promotionCostInput(value) {
if (!value) {
this.promotionCostValid = false;
} else {
this.promotionCostValid = true;
}
}
当用户选中复选框时,如何验证同级输入?
最佳答案
您的问题是您的 next
按钮的状态仅在您的任何输入触发 keyup
事件时才会更新。此外,它仅使用 one 输入的值进行更新,但根据您所说的,您要检查 ngFor
的每个输入是否已填充。
我建议您将输入的值存储在您的模型中,并在输入更改或选中复选框时随时检查促销成本是否对所有促销有效。
<div *ngFor="let promotion of promotionOptions; let i = index">
<div class="col-md-6 input-container radio-label">
<mat-checkbox [checked]="!promotion.key" (change)="promotion.key = !promotion.key; checkPromotionCost();">
{{ promotion.name }}
</mat-checkbox>
</div>
<mat-input-container>
<input
matInput
[disabled]="promotion.key"
placeholder="Cost"
name="promotionCost{{i}}"
(keyup)="promotion.cost = $event.target.value; checkPromotionCost();"
[required]="!promotion.key" type="number"
>
<div *ngIf="promotionCost.errors && (promotionCost.dirty || promotionCost.touched)" class="alert alert-danger cost-alert">
<div [hidden]="!promotionCost.errors.required">
Please enter the checked promotion's cost</div>
</div>
</mat-input-container>
</div>
<div class="clearfix"></div>
<div class="button-container">
<button class="main-btn dark icon-left" (click)="updateStep(1)"><i class="fa fa-angle-left"></i>Previous</button>
<button class="main-btn icon-right" (click)="updateStep(3)" [disabled]="!promotionCostValid">Next<i class="fa fa-angle-right"></i></button>
</div>
在 Controller 中:
checkPromotionCost() {
this.promotionCostValid = true;
this.promotionOptions.forEach(promotion => {
if (promotion.key && promotion.cost === '') {
this.promotionCostValid = false;
}
});
}
关于javascript - 根据 Angular 4 中复选框的更改对输入运行验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47289621/
我是一名优秀的程序员,十分优秀!