[英]Input text field(mobile app) which does not allow user to Enter Numeric value using angularjs
[英]allow only numeric value to enter in the input field
我寫了下面的指令,該指令只允許在輸入字段中輸入數字值。除了允許輸入字母數字外,其他方法都可以正常工作,例如,如果我復制了“ abc123”並將其粘貼到輸入字段中,則它是接受數字而不是字母,這種情況不應該發生。在這種情況下,不應在輸入字段中粘貼任何內容。 請幫忙。
function link(scope, element, attrs, modelCtrl){
modelCtrl.$parsers.push(function(inputValue) {
if (inputValue === undefined) return '';
var cleanInputValue = inputValue.replace('.', '')
.replace(/[^0-9.]/g, '')
.replace(/\./, "x")
.replace(/\./g, "")
.replace(/x/, ".");
if (cleanInputValue != inputValue) {
modelCtrl.$setViewValue(cleanInputValue);
modelCtrl.$render();
}
return cleanInputValue;
})
}
$parsers
: <input type="text" ng-model="test" format="number" />
JS
app.directive('format', ['$filter', '$window', function($filter, $window) {
return {
require: '?ngModel',
link: function(scope, elem, attrs, ctrl) {
if (!ctrl) return;
scope.vKey = 86;
scope.ctrlVDown = false;
angular.element($window).bind("keydown", function($event) {
console.log($event.keyCode);
if ($event.keyCode == scope.vKey) {
scope.ctrlVDown = true;
} else {
scope.ctrlVDown = false;
}
});
ctrl.$parsers.unshift(function(viewValue) {
var plainNumber = viewValue.replace(/[^\d|\-+|\.+]/g, '');
console.log(scope.ctrlVDown);
if (scope.ctrlVDown && plainNumber.length !== viewValue.length) {
elem.val('');
return '';
} else {
elem.val(plainNumber);
return plainNumber;
}
});
}
};
}]);
下面是一個簡單的指令,它僅允許您在輸入字段內輸入數字。
鏈接到輸入字段時:
<input type="text" ng-model="test" valid-number>
它在輸入字段上綁定一個keydown
事件,該事件檢查已按下的鍵。 鍵盤上的每個鍵都有一個全局編號。 例如: enter分配了數字13 。
當您按下鍵盤上的某個鍵時,它與var keyCode
列出的鍵代碼匹配
var keyCode = [8, 9, 37, 39, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 110];
那么我們阻止該動作執行。
(function () { angular.module("app", []) .directive("validNumber", function () { return { restrict: "EA", require: "?ngModel", link: function (scope, element, attrs, ngModel) { if (!ngModel) return; var keyCode = [8, 9, 37, 39, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 110]; element.bind("keydown", function (event) { if ($.inArray(event.which, keyCode) === -1) { scope.$apply(function () { scope.$eval(attrs.validNumber); event.preventDefault(); }); event.preventDefault(); } }); } }; }); })();
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div ng-app="app"> <input type="text" ng-model="test" valid-number="" name="test"> </div>
根據您對其他張貼遮陽篷的評論。 您可以只使用.replace()
函數替換數字以外的所有內容。
即使您復制並粘貼帶有無效字符的有效數字,它也會替換無效字符。
我允許用戶寫一個點.
,因為5.2
是有效數字。 但是,如果您不希望這樣做,可以將regex
替換為
value.replace(/[^0-9]/g, "");
DEMO
(function () { angular.module("app", []) .directive("validNumber", function () { return { restrict: "EA", require: "?ngModel", link: function (scope, element, attrs, ngModel) { if (!ngModel) return; element.bind("keypress keyup", function (event) { var value = element.val(); value = value.replace(/[^0-9.]/g, ""); element.val(value); }); } }; }); })();
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div ng-app="app"> <input type="text" ng-model="test" valid-number="" name="test"> </div>
這可能會有所幫助
input::-webkit-outer-spin-button, input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; /* some part are still there even though it is hidden */ }
<div ng-app="app"> <input type="number" > </div>
如果您對鍵“ e”不滿意,請使用以下命令
var app = angular.module('myApp', []); app.controller('myCtrl', function($scope) { $scope.myFunc = function (event) { if (event.keyCode < 48 || event.keyCode > 57) { event.preventDefault(); } }; });
input::-webkit-outer-spin-button, input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; /* some part are still there even though it is hidden */ }
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <div ng-app="myApp" ng-controller="myCtrl"> <input type="text" ng-keypress="myFunc($event)"> </div>
您是否嘗試將輸入類型設置為數字 ?
<input type="number" />
即使用戶將使用粘貼,這也會自動剝離所有字母字符
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.