【发布时间】:2018-01-14 18:51:02
【问题描述】:
我想将数字输入限制在 0-100 范围内,但在输入时,而不是在验证期间。我正在使用 ngModel 绑定值并发出更改事件:
<input [ngModel]="value" (ngModelChange)="validate($event)" />
然后检查值是否超过给定的限制:
public validate(value) {
if (value > 100)
this.value = 100;
if (value < 0)
this.value = 0;
}
这部分有效。但是,如果我说尝试输入 150 并且值将切换到 100,那么我可以输入任何超过 100 的值,因为模型值仍然是 100,因此输入值不会更新。有没有办法手动强制更新?
编辑:我在这里错过了非常重要的一点。这种行为似乎只发生在 type=number 的输入中。文本输入不会超过 100。我的解决方法是 Faisal 建议使用带有 preventDefault 的 keypress 事件,如下所示:
public keyPress(event) {
let inputChar: number = +String.fromCharCode(event.charCode);
if (this.value + inputChar > 100 || this.value + inputChar < 0) {
// Exceeded limits, prevent input
event.preventDefault();
}
}
【问题讨论】: