Javascript 角度输入百分比和货币掩码
我使用angular,我一直在努力寻找,但我找不到一个好的输入掩码。我将有两种输入,我想要的是,当我键入一个数字时,在货币输入中,我需要一个指令,或者当我键入一个数字时,符号“$”出现在输入的开头 当输入为百分比时,符号“%”是一个指令或在字符串末尾附加“%”的东西 我有这个指令,只允许数字,你可以说整数部分和小数部分的长度。如果可以重复使用,添加$或%将是完美的Javascript 角度输入百分比和货币掩码,javascript,jquery,angularjs,angularjs-directive,Javascript,Jquery,Angularjs,Angularjs Directive,我使用angular,我一直在努力寻找,但我找不到一个好的输入掩码。我将有两种输入,我想要的是,当我键入一个数字时,在货币输入中,我需要一个指令,或者当我键入一个数字时,符号“$”出现在输入的开头 当输入为百分比时,符号“%”是一个指令或在字符串末尾附加“%”的东西 我有这个指令,只允许数字,你可以说整数部分和小数部分的长度。如果可以重复使用,添加$或%将是完美的 app.directive('isNumber', function () { return { require: 'ng
app.directive('isNumber', function () {
return {
require: 'ngModel',
link: function (scope, element, attrs, modelCtrl) {
scope.$watch(attrs.ngModel, function (newValue, oldValue) {
var decimalLenght = parseInt(attrs.decimalpart) + 1;
var integerLenght = parseInt(attrs.integerpart) + 1;
var arr = String(newValue).split("");
if (arr.length === 0) return;
if (arr.length === 1 && arr[0] === '.') return;
if (arr.length === 2 && newValue === '-.') return;
if (isNaN(newValue) || ((index_dot = String(newValue).indexOf('.')) != -1
&& String(newValue).length - index_dot > decimalLenght
) || (index_dot == -1 && arr.length === integerLenght)) {
var scopeVar = scope;
var a = attrs.ngModel.split(".");
for (i = 0; i < a.length - 1; i++) {
if (scopeVar === undefined || scopeVar == null || newValue == null) {
return;
}
scopeVar = scopeVar[a[i]];
}
scopeVar[a[a.length - 1]] = oldValue;
}
});
}
};
});
app.directive('isNumber',函数(){
返回{
要求:'ngModel',
链接:函数(范围、元素、属性、模型控制){
范围$watch(attrs.ngModel,函数(newValue,oldValue){
var decimalLenght=parseInt(attrs.decimalpart)+1;
var integerLenght=parseInt(attrs.integerpart)+1;
var arr=String(newValue).split(“”);
如果(arr.length==0)返回;
if(arr.length==1&&arr[0]=='.')返回;
if(arr.length==2&&newValue==='-.')返回;
if(isNaN(newValue)| |((index_dot=String(newValue).indexOf('.'))!=-1
&&字符串(newValue).length-index_dot>decimalLenght
)| |(索引_点==-1&&arr.length==整数长度)){
var scopeVar=范围;
var a=attrs.ngModel.split(“.”);
对于(i=0;i
用它来表示数字、小数和整数
您可以使用它,但必须对其进行微调。这只是一个粗略的方法。
看看这把小提琴
app.directive('isNumber',函数(){
返回{
要求:'ngModel',
链接:函数(范围、元素、属性、模型控制){
调试器;
范围$watch(attrs.ngModel,函数(newValue,oldValue){
var decimalLenght=parseInt(attrs.decimalpart)+1;
var integerLenght=parseInt(attrs.integerpart)+1;
newValue=newValue.replace(“$”,“”);
var arr=String(newValue).split(“”);
如果(arr.length==0)返回;
if(arr.length==1&&arr[0]=='.')返回;
if(arr.length==2&&newValue==='-.')返回;
if(isNaN(newValue)| |((index_dot=String(newValue).indexOf('.'))!=-1
&&字符串(newValue).length-index_dot>decimalLenght
)| |(索引_点==-1&&arr.length==整数长度)){
var scopeVar=范围;
var a=attrs.ngModel.split(“.”);
对于(i=0;i
问题的位置不合适。你打算如何区分30美元和30%?
app.directive('isNumber', function () {
return {
require: 'ngModel',
link: function (scope, element, attrs, modelCtrl) {
debugger;
scope.$watch(attrs.ngModel, function (newValue, oldValue) {
var decimalLenght = parseInt(attrs.decimalpart) + 1;
var integerLenght = parseInt(attrs.integerpart) + 1;
newValue = newValue.replace('$','');
var arr = String(newValue).split("");
if (arr.length === 0) return;
if (arr.length === 1 && arr[0] === '.') return;
if (arr.length === 2 && newValue === '-.') return;
if (isNaN(newValue) || ((index_dot = String(newValue).indexOf('.')) != -1
&& String(newValue).length - index_dot > decimalLenght
) || (index_dot == -1 && arr.length === integerLenght)) {
var scopeVar = scope;
var a = attrs.ngModel.split(".");
for (i = 0; i < a.length - 1; i++) {
if (scopeVar === undefined || scopeVar == null || newValue == null) {
return;
}
scopeVar = scopeVar[a[i]];
}
scopeVar[a[a.length - 1]] = oldValue;
return;
}
var scopeVariable = scope;
var ngMod = attrs.ngModel.split(".");
for (i = 0; i < ngMod.length - 1; i++) {
if (scopeVariable === undefined || scopeVariable == null || newValue == null) {
return;
}
scopeVariable = scopeVariable[ngMod[i]];
}
scopeVariable[ngMod[ngMod.length - 1]]='$'+ newValue;
});
}
};
});