保留输入值,而不管输入类型="number"是否验证

Preserving input value regardless of validation with input type="number"

本文关键字:quot 输入 是否 验证 number 类型 不管 保留      更新时间:2023-09-26

我在使用angularJs和输入type="number"时遇到了奇怪的情况。基本上,如果我的输入类型是number,并且初始值超出了min和max定义的范围,那么我的初始值将被销毁。

我已经尽力说明这个问题- http://jsfiddle.net/PK3QH/2/

HTML:

<div ng-controller="MyCtrl">
    <input ng-model="bindData.SomeAmount" type="number" required="required" />
    <br />
    <input ng-model="bindData.SomeAmount" type="number" required="required" 
        min="2" max="10" />
</div>
Javascript:

var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
    $scope.bindData = {
        SomeAmount: 1
    };
}

正如您所看到的,第一个文本框没有任何问题,但第二个文本框根本不显示值。我绝对需要值被保留,同时也被验证为数字在一定范围内-所以有任何方法我们这?

我同意这是一个bug。

这是因为格式化程序在验证程序之前被应用。'number'

的格式化器
  if (attr.min) {
    var minValidator = function(value) {
      var min = parseFloat(attr.min);
      return validate(ctrl, 'min', ctrl.$isEmpty(value) || value >= min, value);
    };
    ctrl.$parsers.push(minValidator);
    **ctrl.$formatters.push(minValidator);**
  }

所有的$formatters会在验证器开始运行之前先运行…结帐NgModelController .

我想知道当$dirty != true时,如果他们基于有效性应用了格式化器,即如果验证结果为false,让格式化器产生,是否"第一次"。

对于minNumber,格式化器应该只是一个数字。为什么我们需要minNumber的格式化器?

升高https://github.com/angular/angular.js/issues/8264

在Angular团队修复之前,这个短期的解决方案将是使用你自己的指令来代替min。

恕我直言,这是一个bug。

如果您删除ng-model属性,您将看到初始值。

如果这不是一个错误,当我们输入无效的值,如40,我们不能看到输入的文本,因为它发生在初始化时。看,这不一致。

它只在input指令初始化时第一次发生。

IMO,即使模型值不是value,也应该保持原值,不设为空白。

抱歉没有提供解决方案。