阻止输入类型编号的最大长度

utugiqy6  于 2022-10-24  发布在  Angular
关注(0)|答案(3)|浏览(170)

我花了一段时间才弄明白这个问题,但有人能发布一个更简洁的方法来限制输入type=‘number’中的位数吗?其中一个问题是,如果$scope e.Variable=NULL...表示在输入字段中没有任何内容,则会抛出错误。

<input type="number" model='modalName' ng-change="monitorLength('modalName',16)">

JS:

$scope.monitorLength = function (model,maxLength) {
    if ($scope[model] != null) {  // prevent error on empty input field
      var len = $scope[model].toString() ;  // convert to a string
      if (len.length > maxLength) {  //evaluate string length
        $scope[model] = parseInt(len.substring(0, maxLength));  
        // convert back to number or warning is thrown on input value not being a number
      }
    }
  }

然后,我需要在此基础上进行扩展,以仅说明数字,防止任何非数字字符包括‘’和‘,’符号:

var reg = new RegExp(/^\d+$/) ;
  $scope.monitorLength = function (modal,maxLength) {
    if ($scope[modal] != null) {
      var len = $scope[modal].toString() ;
      if (len.length > maxLength) {
        $scope[modal] = parseInt(len.substring(0, maxLength));
      } else if (!reg.test(len)) {
        $scope[modal] = parseInt(len.substring(0, len.length-2));
      }
    }
  }

有没有办法提取负责调用ng-change的ng-modal?因此,调用只需为:ng-change="monitorLength(10)"。然后在函数中以某种方式动态检索调用的ng模式?

ryevplcw

ryevplcw1#

<input type="number" max="99" onkeypress="if (this.value.length >= 2) return false;"/>

<!--maxlength="10"-->
<input type="number" onKeyPress="if(this.value.length==10) return false;" />
o4tp2gmn

o4tp2gmn2#

这是一种更简洁的限制数量的方法,使用ngMaxlong来实现:

<input type="number" model='modalName' ng-maxlength="16">

您可以找到更多属性和信息here

pu82cl6c

pu82cl6c3#

有没有办法提取负责调用ng-change的ng-modal?
是。您可以定义指令并要求ngModelController

.directive('maxNum', function(){
    return {
        require: '^ngModel',
        link: function($scope, elem, attrs){
            // here you can add formatters/parsers to the ngModel 
            // to affect the change on the ngModel.$viewValue.

        }
    }
})

正如@Rolinger在另一个答案中所述,使用内置指令不会阻止用户输入无效字符,它们只是将模型标记为无效。

相关问题