angularjs – 如何只允许在输入中键入数字(数字和小数点)?

前端之家收集整理的这篇文章主要介绍了angularjs – 如何只允许在输入中键入数字(数字和小数点)?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我是angularjs的新人。我想知道什么是只允许一个有效的数字键入到文本框的方式。
例如,用户可以键入“1.25”,但不能键入“1.a”或“1 ..”。当用户尝试键入下一个字符将使其成为无效的数字时,他无法键入。

提前致谢。

您可以尝试此伪指令来阻止任何无效字符输入到输入字段。 (更新:这依赖于指令具有对模型的显式知识,这对于可重用性不是理想的,见下面的可重用示例)
  1. app.directive('isNumber',function () {
  2. return {
  3. require: 'ngModel',link: function (scope) {
  4. scope.$watch('wks.number',function(newValue,oldValue) {
  5. var arr = String(newValue).split("");
  6. if (arr.length === 0) return;
  7. if (arr.length === 1 && (arr[0] == '-' || arr[0] === '.' )) return;
  8. if (arr.length === 2 && newValue === '-.') return;
  9. if (isNaN(newValue)) {
  10. scope.wks.number = oldValue;
  11. }
  12. });
  13. }
  14. };
  15. });

它也解释了这些情况:

>从非空有效字符串转换为空字符串
>负值
>负十进制值

我在这里创建了一个jsFiddle,这样你可以看到它是如何工作的。

更新

以下Adam Thomas的反馈,不包括直接在指令内的模型引用(我也认为是最好的方法),我更新了我的jsFiddle提供一个不依赖于这一点的方法

该指令利用局部范围与父范围的双向绑定。对指令中的变量所做的更改将反映在父作用域中,反之亦然。

HTML:

  1. <form ng-app="myapp" name="myform" novalidate>
  2. <div ng-controller="Ctrl">
  3. <number-only-input input-value="wks.number" input-name="wks.name"/>
  4. </div>
  5. </form>

角码:

  1. var app = angular.module('myapp',[]);
  2.  
  3. app.controller('Ctrl',function($scope) {
  4. $scope.wks = {number: 1,name: 'testing'};
  5. });
  6. app.directive('numberOnlyInput',function () {
  7. return {
  8. restrict: 'EA',template: '<input name="{{inputName}}" ng-model="inputValue" />',scope: {
  9. inputValue: '=',inputName: '='
  10. },link: function (scope) {
  11. scope.$watch('inputValue',oldValue) {
  12. var arr = String(newValue).split("");
  13. if (arr.length === 0) return;
  14. if (arr.length === 1 && (arr[0] == '-' || arr[0] === '.' )) return;
  15. if (arr.length === 2 && newValue === '-.') return;
  16. if (isNaN(newValue)) {
  17. scope.inputValue = oldValue;
  18. }
  19. });
  20. }
  21. };
  22. });

猜你在找的Angularjs相关文章