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