一尘不染

角度指令忽略非数字输入

angularjs

我必须为IE8写一些代码。我有一个ng-repeat创建一个充满以下内容的表:

<input production-qty type="text" class="input-mini" maxlength="3" ng-model="day.qtyA" ui-event="{ blur : 'updateProduction(day)' }" ng-disabled="day.type=='H'">

IE8不会输入type = number

我想要一个指令,该指令将忽略该输入字段上不是数字键的击键....即.... 0-9

我不想让用户键入abc并污染模型,然后告诉他们该值无效。我宁愿不要让他们输入任何无效的数据。


阅读 468

收藏
2020-07-04

共1个答案

一尘不染

HTML:

<input production-qty type="text" maxlength="3" ng-model="qty1">

指示:

app.directive('productionQty', function() {
  return {
    require: 'ngModel',
    link: function (scope, element, attr, ngModelCtrl) {
      function fromUser(text) {
        var transformedInput = text.replace(/[^0-9]/g, '');
        console.log(transformedInput);
        if(transformedInput !== text) {
            ngModelCtrl.$setViewValue(transformedInput);
            ngModelCtrl.$render();
        }
        return transformedInput;  // or return Number(transformedInput)
      }
      ngModelCtrl.$parsers.push(fromUser);
    }
  }; 
});

柱塞

另请参见input中有关ng-model的过滤器。我上面的答案是基于pkozlowski.opensource的答案建模的。

我看了ng-pattern,但是它不能过滤文本框中显示的内容。设置$scope.qty1undefined,但是不需要的字符在文本框中可见。

2020-07-04