Javascript 防止用户键入非数字输入

Javascript 防止用户键入非数字输入,javascript,angularjs,Javascript,Angularjs,我需要允许用户只键入数字。这就是我所做的 我的指令模板的一部分: <input type="text" maxlength="5" ng-keypress="allowNumbers($event)"> 我的指令中的功能: $scope.allowNumbers= function (ev) { var key = ev.charCode || ev.keyCode || 0; var allowed = ( key == 8 ||

我需要允许用户只键入数字。这就是我所做的

我的指令模板的一部分:

<input type="text" maxlength="5" ng-keypress="allowNumbers($event)">

我的指令中的功能:

$scope.allowNumbers= function (ev) {
    var key = ev.charCode || ev.keyCode || 0;
    var allowed = (
        key == 8 ||
        key == 9 ||
        key == 13 ||
        key == 46 ||
        key == 110 ||
        key == 190 ||
        (key >= 35 && key <= 40) ||
        (key >= 48 && key <= 57) ||
        (key >= 96 && key <= 105));

    return allowed;
};
$scope.allowNumbers=函数(ev){
var key=ev.charCode | | ev.keyCode | | 0;
允许的变量=(
键==8||
键==9||
键==13||
键==46||
键==110||
键==190||

(key>=35&&key=48&&key=96&&key我将以一种更简单的方式处理此问题,并保证捕获更多可能的输入形式(例如复制粘贴):


$scope.$watch('myNumber',函数(输入){
$scope.myNumber=input.replace(/\D/g');
});
函数为数字(e){
var-keyCode=e.keyCode==0?e.charCode:e.keyCode;

var ret=((keyCode>=48&&keyCode您可以使用
指令

angular.module('myApp', []).directive('numbersOnly', function(){
    return {
        require: 'ngModel',
        link: function(scope, element, attrs, modelCtrl) {
            modelCtrl.$parsers.push(function (inputValue) {
                if (!inputValue) return ''
                var transformedInput = inputValue.replace(/[^0-9]/g, '');
                if (transformedInput !== inputValue) {
                    modelCtrl.$setViewValue(transformedInput);
                    modelCtrl.$render();
                }

                return transformedInput;
            });
        }
    };
});
然后像这样使用它:

<input type="text" maxlength="5" numbers-only/>

只需添加
numbers only
属性,即可将此行为用于所需的任何输入


请参阅。

您的函数名为
allowNumbers
还是
allowNumberOnly
?如果(!allowed)ev.preventDefault();
您就不能使用type=“number”吗?是的@LDJ是正确的,如果你只想要数字,为什么你不能使用数字输入字段而不是文本输入字段?如果用户复制并粘贴像“asdd1as3asd3”这样的数据,根据描述的逻辑,结果将是133。我不认为这是询问的目的。为什么不呢?在这种情况下它应该做什么?输入只允许考虑对数字来说,剔除所有非数字对我来说是完全合理的。你的解决方案是好的,除了一件事。如果光标在数字的中间,然后键入字母(不是数字),光标移到输入的末尾。谢谢回答。
     <input type="text"  onkeypress="return IsNumeric(event);" />
angular.module('myApp', []).directive('numbersOnly', function(){
    return {
        require: 'ngModel',
        link: function(scope, element, attrs, modelCtrl) {
            modelCtrl.$parsers.push(function (inputValue) {
                if (!inputValue) return ''
                var transformedInput = inputValue.replace(/[^0-9]/g, '');
                if (transformedInput !== inputValue) {
                    modelCtrl.$setViewValue(transformedInput);
                    modelCtrl.$render();
                }

                return transformedInput;
            });
        }
    };
});
<input type="text" maxlength="5" numbers-only/>