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/>