Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.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_Html_Angularjs - Fatal编程技术网

Javascript 阻止文本字段中的第一个数字

Javascript 阻止文本字段中的第一个数字,javascript,html,angularjs,Javascript,Html,Angularjs,我有一个文本输入绑定到一个包含5位数字的变量。如何阻止第一个数字,以便只有其他4个数字可编辑 目前我有这样一个:ng model=“my_var”ng pattern=“/^\d{5}$/” 请注意,该值是双向绑定的,这意味着我正在显示它,用户可以编辑/保存它。您可以使用与ngModel一起工作的自定义指令 它可以使用解析器/格式化程序修改读取/打印的值 请在此处阅读更多信息:($formatters和$parser)也许不是最好的解决方案,但它可以工作: HTML <input ng-m

我有一个文本输入绑定到一个包含5位数字的变量。如何阻止第一个数字,以便只有其他4个数字可编辑

目前我有这样一个:
ng model=“my_var”ng pattern=“/^\d{5}$/”


请注意,该值是双向绑定的,这意味着我正在显示它,用户可以编辑/保存它。

您可以使用与ngModel一起工作的自定义指令

它可以使用解析器/格式化程序修改读取/打印的值


请在此处阅读更多信息:($formatters和$parser)

也许不是最好的解决方案,但它可以工作:

HTML

<input ng-model="my_var" maxlength="5">

这是一个可行的解决方案(您可能需要根据您的特殊需要对其进行一些调整):

以及如何使用它:

<p>var: {{my_var}}</p>
<input type="text" ng-model="my_var" filter-input="1"/>
var:{{my_var}


顺便说一句:它只允许传递数字:-)

如何首先获取第一个数字?@Banana in Black在
get
之后从服务器接收时,该值保证有一个5位数字。这不是我所要求的分段错误:RangeError:最大调用堆栈大小exceeded@alexandernst如果你想用它使用ng模式--as ng模式将$modelValue设置为未定义。您可以尝试将指令的优先级更改为高于ng模式的优先级,或者完全退出ng模式,因为不可能放入无效输入。你看过plnkr了吗?所以。。。我删除了ng模式,现在它不允许我输入任何超过1位数的内容。你确定这有用吗?@alexandernst你看这里了吗:?(在chorme中效果很好)是的,我正在看。如果我按原样运行它,它将进入某种错误循环。它最终会退出循环,说出我在第一次答复中已经提到的内容。
app.directive("filterInput", function () {

    return {
        require: 'ngModel', // controller to ng-model needed
        restrict: 'A',

        link: function (scope, element, attrs, modelCtrl) {

            var unchanged = attrs.filterInput;
            var regex = /^\d{0,5}$/; // the RegExp (in more generic solution could be passed from outside)

            modelCtrl.$parsers.push(function (inputValue) { // adding new $parser

                 if(inputValue[0] != unchanged){ // if the first digit is different from what it should be set value as the first digit
                    modelCtrl.$setViewValue(unchanged);
                    modelCtrl.$render();
                    return unchanged;
                }

                if(inputValue.length > 5){ // trim the input if it is longer than five -- it is not generic at all
                    var rv = inputValue.substring(0,5);

                    modelCtrl.$setViewValue(rv);
                    modelCtrl.$render();

                    return rv;
                }



                var transformedInput = regex.exec(inputValue);

                if (transformedInput != null) { // check if pattern exists
                    transformedInput = transformedInput[0];
                }
                else {
                    transformedInput = unchanged; // if not set the value to the not changeable part
                }

                if (transformedInput != inputValue) { // re-render if value changed
                    modelCtrl.$setViewValue(transformedInput); 
                    modelCtrl.$render();
                }
                return transformedInput;
            });
        }
    }
}); 
<p>var: {{my_var}}</p>
<input type="text" ng-model="my_var" filter-input="1"/>