Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度输入百分比和货币掩码_Javascript_Jquery_Angularjs_Angularjs Directive - Fatal编程技术网

Javascript 角度输入百分比和货币掩码

Javascript 角度输入百分比和货币掩码,javascript,jquery,angularjs,angularjs-directive,Javascript,Jquery,Angularjs,Angularjs Directive,我使用angular,我一直在努力寻找,但我找不到一个好的输入掩码。我将有两种输入,我想要的是,当我键入一个数字时,在货币输入中,我需要一个指令,或者当我键入一个数字时,符号“$”出现在输入的开头 当输入为百分比时,符号“%”是一个指令或在字符串末尾附加“%”的东西 我有这个指令,只允许数字,你可以说整数部分和小数部分的长度。如果可以重复使用,添加$或%将是完美的 app.directive('isNumber', function () { return { require: 'ng

我使用angular,我一直在努力寻找,但我找不到一个好的输入掩码。我将有两种输入,我想要的是,当我键入一个数字时,在货币输入中,我需要一个指令,或者当我键入一个数字时,符号“$”出现在输入的开头

当输入为百分比时,符号“%”是一个指令或在字符串末尾附加“%”的东西

我有这个指令,只允许数字,你可以说整数部分和小数部分的长度。如果可以重复使用,添加$或%将是完美的

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;
    });
}
   };
});