【问题标题】:How to restrict input number to non-decimal如何将输入数字限制为非十进制
【发布时间】:2015-01-18 11:26:12
【问题描述】:

我在页面上有一个数字输入,我希望它限制为整数值,没有小数。我正在使用表单和 angularjs 进行验证。我该怎么做才能使小数不被允许?我尝试将 step 设置为 1,但这没有改变。许多其他问题讨论了让浏览器支持小数 - 我似乎遇到了相反的问题。

【问题讨论】:

  • 使用 javascript 捕获相关文本区域内的击键并防止 "."

标签: html angularjs forms validation numbers


【解决方案1】:

您可以为此创建一个自定义指令,并结合 ngModelController. 像这样:Proof of Concept

    module.directive("noDecimalInput", function() {
    return {
        restrict: "A",
        require:"ngModel",
        link: function(scope,element,attr,ctrl) {
            ctrl.$parsers.push(function(value){
                if(value.indexOf(".")>-1) {
                    ctrl.$setValidity("notDecimal",false);
                    return undefined;
                }
                ctrl.$setValidity("notDecimal",true);
                return value;
            });
        }
    }
});

【讨论】:

  • 因此,当您的输入是文本时,它可以很好地工作,但是当输入是数字时,我无法让它工作。在这种情况下,指令有何不同?我没有立即明白为什么会有任何不同。
  • 我的猜测是,如果输入是“数字”,则进入解析器的值不再是字符串,因此无法进行像“index.of”这样的字符串操作。您应该在对其进行操作之前将值转换为字符串,然后,您可以将其 parseFloat(value) 转换回 Number 类型。
  • 对于数字,您可以检查value % 1 !== 0,这将检查十进制值,但也允许诸如1.1.0之类的东西
猜你喜欢
  • 1970-01-01
  • 2011-10-18
  • 1970-01-01
  • 2014-03-19
  • 1970-01-01
  • 2020-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多