首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法对type=number的输入字段应用限制

问无法对type=number的输入字段应用限制
EN

Stack Overflow用户
提问于 2017-09-07 05:50:49
回答 3查看 8.8K关注 0票数 3

下面是我的type="number"输入字段。我已经应用了min和max属性来限制用户输入字段的值。问题是,给定的验证仍然允许用户在输入数值时超出限制。请告诉我如何阻止他/她输入超过限值的值。

代码语言:javascript
复制
 <input name="capacity" [(ngModel)]="nService.capacity" type="number" 
class="input-minimal" min="1" max="9999" placeholder="Capacity" required>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-09-07 08:42:51

将属性max和min设置在带有type = "number"的输入上,将防止用户使用旋转器递增/减少值。但是它不会阻止键盘的输入。要做到这一点,您必须编写自定义验证器。

在我的示例中,我使用一个可选的错误验证块绑定到keyup事件,以防万一您希望让用户自己更正。

柱塞

HTML:

代码语言:javascript
复制
 <input autofocus id="myModel" (keyup)="preventInput($event)" 
       name="myModel" 
        #myModel="ngModel"  style="width:60px"  
        [(ngModel)]="capacity" type="number" 
       class="input-minimal" min="1" max="99" 
       placeholder="Capacity" required>

打字本:

代码语言:javascript
复制
 preventInput(event){
    let value=this.capacity;
    if (value >= 100){
      event.preventDefault()
      this.capacity = parseInt(value.toString().substring(0,2));
    }
  }

在验证部分,我使用了来自这里的解决方案

票数 4
EN

Stack Overflow用户

发布于 2017-09-07 07:07:10

在寄出之前你必须先检查一下有效性。

下面是如何使用反应形式:

代码语言:javascript
复制
<form novalidate (onSubmit)="submitForm()" [formGroup]="myForm">
    <input type="number" formControlName="myNumber">
    <button type="submit">Send</button>
</form>

TS

代码语言:javascript
复制
import {FormBuilder, FormGroup, Validators} from '@angular/forms';


myForm: FormGroup;
constructor(prviate fb: FormBuilder) {
    this.myForm = fb.group({
        myNumber: [0, [Validators.max(9999), Validators.min(1)]]
    });
}

submitForm() {
    let value = this.myForm.value;
    if (this.myForm.valid) {
        // Here, do your stuff when the form is valid
    }
}
票数 1
EN

Stack Overflow用户

发布于 2017-09-07 05:58:55

这是自定义指令的代码,我将其限制为属性:

AngularJs最大长度自定义指令:

代码语言:javascript
复制
app.directive('inputMaxlength', function() {
  return {
    require: 'ngModel',
    link: function (scope, element, attrs, ngModelCtrl) {
      var maxlength = Number(attrs.inputMaxlength);
      function fromUser(text) {
          if (text.length > maxlength) {
            var transformedInput = text.substring(0, maxlength);
            ngModelCtrl.$setViewValue(transformedInput);
            ngModelCtrl.$render();
            return transformedInput;
          } 
          return text;
      }
      ngModelCtrl.$parsers.push(fromUser);
    }
  }; 
})

在HTML中使用以下自定义指令

代码语言:javascript
复制
<input type="text" input-maxlength=20 ......>

对于角形验证,有大量的样本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46088738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档