我已限制用户将来使用html 5日期选择器在输入中输入日期。但是用户可以输入将来的日期。如果他们不选择从日期选择器日历中选择日期值,是否可以阻止用户输入将来的日期?
这是我的代码:
HTML
<div class="col-sm-7">
<input type="date" class="form-control" [max]="maxDate" pattern="^(19[5-9][0-9]|20[0-4][0-9]|2050)[-/](0?[1-9]|1[0-2])[-/](0?[1-9]|[12][0-9]|3[01])$" name="Datebillabuse" [(ngModel)]="Datebillabuse" #date="ngModel" [ngClass]="{ 'is-invalid': f.submitted && date.invalid }" required />
<div *ngIf="f.submitted && date.invalid" class="invalid-feedback">
<div *ngIf="date.errors.required">Date is required</div>
<div *ngIf="date.errors.pattern">Please enter a valid date</div>
<div *ngIf='date.errors.max'>Date must not be in future</div>
</div>
</div>
TypeScript
setTodayDate() {
const dtToday = new Date();
let month = String(dtToday.getMonth() + 1);
let day = String(dtToday.getDate());
let year = dtToday.getFullYear();
if (parseInt(month, 10) < 10) {
month = '0' + month.toString();
}
if (parseInt(day, 10) < 10) {
day = '0' + day.toString();
}
this.maxDate = `${year}-${month}-${day}`;
}
我想到的一种解决方案是检查日期值是否大于今天并显示错误。
在Angular中还有更好的解决方法吗?
答案 0 :(得分:0)
当我们通过设置maximum属性限制用户时,html输入类型的date元素存在问题,因为这不允许用户从日历下拉列表中选择日期,但用户仍可以使用键盘键入不需要的值。所以这是hack,我曾经用来解决这个问题
声明一个布尔值以检查日期是否无效。
futureDateError:布尔值;
声明一种检查输入日期是否有效的方法。
checkDateValidity(date:string):布尔值 {
const mxDate = new Date(this.maxDate);
const inputDate = new Date(date);
if (inputDate > mxDate) {
return this.futureDateError = true;
}
return this.futureDateError = false;
}
将此事件与(change)
事件绑定。
当日期无效且不提交表单时显示错误。
日期不能在将来如果(this.checkDateValidity(this.Datebillabuse)){ 返回; }