Ali*_*san 67 javascript ruby-on-rails numeric angularjs
在angularjs有任何可用的功能,只允许数字被输入到一个文本框状
Ant*_*ton 64
此代码显示了如何防止输入非数字符号的示例.
angular.module('app').
directive('onlyDigits', function () {
return {
restrict: 'A',
require: '?ngModel',
link: function (scope, element, attrs, modelCtrl) {
modelCtrl.$parsers.push(function (inputValue) {
if (inputValue == undefined) return '';
var transformedInput = inputValue.replace(/[^0-9]/g, '');
if (transformedInput !== inputValue) {
modelCtrl.$setViewValue(transformedInput);
modelCtrl.$render();
}
return transformedInput;
});
}
};
});
Run Code Online (Sandbox Code Playgroud)
小智 42
HTML
<input type="text" name="number" only-digits>
Run Code Online (Sandbox Code Playgroud)
//输入123
.directive('onlyDigits', function () {
return {
require: 'ngModel',
restrict: 'A',
link: function (scope, element, attr, ctrl) {
function inputValue(val) {
if (val) {
var digits = val.replace(/[^0-9]/g, '');
if (digits !== val) {
ctrl.$setViewValue(digits);
ctrl.$render();
}
return parseInt(digits,10);
}
return undefined;
}
ctrl.$parsers.push(inputValue);
}
};
});
Run Code Online (Sandbox Code Playgroud)
//键入:123或123.45
.directive('onlyDigits', function () {
return {
require: 'ngModel',
restrict: 'A',
link: function (scope, element, attr, ctrl) {
function inputValue(val) {
if (val) {
var digits = val.replace(/[^0-9.]/g, '');
if (digits.split('.').length > 2) {
digits = digits.substring(0, digits.length - 1);
}
if (digits !== val) {
ctrl.$setViewValue(digits);
ctrl.$render();
}
return parseFloat(digits);
}
return undefined;
}
ctrl.$parsers.push(inputValue);
}
};
});
Run Code Online (Sandbox Code Playgroud)
sam*_*nau 37
我只是在指令中使用ng-keypress来输入.
HTML:
<input type="text" ng-keypress="filterValue($event)"/>
Run Code Online (Sandbox Code Playgroud)
JS:
$scope.filterValue = function($event){
if(isNaN(String.fromCharCode($event.keyCode))){
$event.preventDefault();
}
};
Run Code Online (Sandbox Code Playgroud)
ana*_*mok 25
这个功能正是您所需要的.http://docs.angularjs.org/api/ng.directive:input.number
编辑:
您可以将jquery插件包装到指令中.我在这里创建了一个例子:http://jsfiddle.net/anazimok/jTJCF/
HTML:
<div ng-app="myApp">
<div>
<input type="text" min="0" max="99" number-mask="" ng-model="message">
<button ng-click="handleClick()">Broadcast</button>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
CSS:
.ng-invalid {
border: 1px solid red;
}
Run Code Online (Sandbox Code Playgroud)
JS:
// declare a module
var app = angular.module('myApp', []);
app.directive('numberMask', function() {
return {
restrict: 'A',
link: function(scope, element, attrs) {
$(element).numeric();
}
}
});
Run Code Online (Sandbox Code Playgroud)
Sij*_*ung 18
这是最简单,最快速的方法,仅允许数字输入.
<input type="text" id="cardno" placeholder="Enter a Number" onkeypress='return event.charCode >= 48 && event.charCode <= 57' required>
Run Code Online (Sandbox Code Playgroud)
谢谢
以Anton的答案为基础 -
angular.module("app").directive("onlyDigits", function ()
{
return {
restrict: 'EA',
require: '?ngModel',
scope:{
allowDecimal: '@',
allowNegative: '@',
minNum: '@',
maxNum: '@'
},
link: function (scope, element, attrs, ngModel)
{
if (!ngModel) return;
ngModel.$parsers.unshift(function (inputValue)
{
var decimalFound = false;
var digits = inputValue.split('').filter(function (s,i)
{
var b = (!isNaN(s) && s != ' ');
if (!b && attrs.allowDecimal && attrs.allowDecimal == "true")
{
if (s == "." && decimalFound == false)
{
decimalFound = true;
b = true;
}
}
if (!b && attrs.allowNegative && attrs.allowNegative == "true")
{
b = (s == '-' && i == 0);
}
return b;
}).join('');
if (attrs.maxNum && !isNaN(attrs.maxNum) && parseFloat(digits) > parseFloat(attrs.maxNum))
{
digits = attrs.maxNum;
}
if (attrs.minNum && !isNaN(attrs.minNum) && parseFloat(digits) < parseFloat(attrs.minNum))
{
digits = attrs.minNum;
}
ngModel.$viewValue = digits;
ngModel.$render();
return digits;
});
}
};
});
Run Code Online (Sandbox Code Playgroud)
我的解决方案接受复制和粘贴并保存插入符号的位置.它用于产品成本,因此仅允许正十进制值.可以很容易地重构,允许负数或只是整数位.
angular
.module("client")
.directive("onlyNumber", function () {
return {
restrict: "A",
link: function (scope, element, attr) {
element.bind('input', function () {
var position = this.selectionStart - 1;
//remove all but number and .
var fixed = this.value.replace(/[^0-9\.]/g, '');
if (fixed.charAt(0) === '.') //can't start with .
fixed = fixed.slice(1);
var pos = fixed.indexOf(".") + 1;
if (pos >= 0) //avoid more than one .
fixed = fixed.substr(0, pos) + fixed.slice(pos).replace('.', '');
if (this.value !== fixed) {
this.value = fixed;
this.selectionStart = position;
this.selectionEnd = position;
}
});
}
};
});
Run Code Online (Sandbox Code Playgroud)
放在html页面上:
<input type="text" class="form-control" only-number ng-model="vm.cost" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
196845 次 |
| 最近记录: |