- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经通过 Angular 设置了一个 UI 页面,我正尝试在输入元素上利用内置的 ng-maxlength
验证器。长话短说,我知道 $scope.form.$error
以及在验证失败的情况下该对象如何具有 maxlength
属性。但是我想显示一条特定于违反的字符长度的错误消息,而且我在任何地方都看不到我指定的长度存储在这个对象上。有谁知道是否可以访问它,所以我不必为每个违反最大长度的输入写出单独的错误消息?
最佳答案
编辑:为了回答您的问题,是的,angular 确实在 $error 对象中存储了一个 bool 值,您可以通过对象中设置的键访问该值。对于我在下面和 jsFiddle 中提供的代码,我们设置了 angular 的键,以及 true 或 false 的值。
设置值时要注意,因为它是相反的。前任。 $setValidity( true ),将 $error 翻转为 false。
好的,这就是我认为您正在寻找的...
在 Angularjs v1.2.13 中,您将无法访问 ng-message 或 $validator 管道,这就是我们使用 $formatters 和 $parsers 的原因。
在这种情况下,我使用的是命名输入,但在您的情况下,您可能需要动态输入名称?
另外,如果您使用的是输入而不是表单,则必须使用单独的自定义指令来获取要显示的错误消息。
如果是这样,那么请在此处查看动态命名的输入字段以获得一些帮助。
dynamic input name in Angularjs link
让我知道这是否可行;我会根据需要进行更改以连接您!
如果您不知道,您可以为每个单独的输入重写 Angular 的最大长度。
如果您在下面的指令中将 updateValidity() 函数中的“maxlength”更改为“butter”之类的内容,则 $scope.form.inputname.$error 将类似于
$scope.formname.inputname.$error { butter: true }
if you also used ng-maxlength="true", then it would be
$scope.formname.inputname.$error { butter: true, maxlength: true }
Another example if you used ng-maxlength, and capitalized the 'maxlength' in the directive to 'Maxlength'
Then you would get
$scope.formname.inputname.$error { maxlength: true(angular maxlength), Maxlength: true(your maxlength)
And of course if you name it the same, then yours writes over angulars
$scope.formname.inputname.$error { maxlength: true };
重点是您可以将自己的名称添加到 Angular $error 对象;你可以覆盖 Angular 的;当你使用 Angular 的指令时,你可以只使用 Angular 给你的东西:比如 ng-required="true",或者 ng-maxlength="true"
在 jsFiddle 上链接到你的 angularjs 版本 jsFiddle LInk
<div ng-app="myApp">
<form name="myForm">
<div ng-controller="MyCtrl">
<br>
<label>Input #1</label>
<br>
<input ng-model="field.myName" name='myName' my-custom-length="8" />
<span ng-show="myForm.myName.$error.maxlength">
Max length exceeded by {{ myForm.myName.maxlength }}
</span>
<br>
<br>
<label>Input #2</label>
<br>
<input ng-model="field.myEmail" name='myEmail' my-custom-length="3" />
<span ng-show="myForm.myEmail.$error.maxlength">
Max length exceeded by {{ myForm.myEmail.maxlength }}
</span>
</div>
</form>
</div>
var app = angular.module('myApp', []);
app.controller('MyCtrl', function ($scope) {
$scope.field = {};
});
app.directive("myCustomLength", function () {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, element, attrs, ctrl) {
if (!ctrl) { return } // ignore if no ngModel controller
ctrl.$formatters.push(validateInput);
ctrl.$parsers.unshift(validateInput);
function validateInput(value) {
if (!value) {
updateValidity(false);
return;
}
inputLength(value);
var state = value.length > attrs.myCustomLength;
updateValidity(state);
}
function inputLength(value) {
ctrl.maxlength = null;
var length = value.length > attrs.myCustomLength;
if (length) {
ctrl.maxlength = (value.length - attrs.myCustomLength).toString();
}
}
function updateValidity(state) {
ctrl.$setValidity('maxlength', !state);
}
} // end link
} // end return
});
如果您需要,请在此处使用 CSS。
input.ng-invalid {
border: 3px solid red !important;
}
关于javascript - AngularJS 是否在 $error.maxlength 对象中存储了一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27324807/
我需要以某种方式将模型的 max_length 约束 Hook 到 Form 对象中。 假设我定义了一个带有字段的模型:name = models.CharField(max_length=30)现在
“On input while maxlength is active trigger even if maxlength is reached”,这是on input事件的经典用法。当达到 maxl
我正在尝试配置一个 TextView,它的 maxLines=3 并且它的每一行都有 maxLenght=30。 感谢您的帮助。 最佳答案 您可以对实际的 30 个字符使用 maxWidth 函数(平
在表单组验证中,我尝试应用输入最大长度,但是,这个最大长度取决于表单中的其他操作。如果它们改变,也改变 maxMsgLength 的属性值。 消息:['', Validators.maxLength(
我有一个 iOS 应用程序,我在其中使用 NSInputStream(基于 CFReadStreamRef)从网络套接字读取数据。我不断从服务器获取数据,并不断读取和处理它(使用 read:bytes
我的输入字段包含数字和特殊字符,例如逗号和点在计算字段的 maxLength 时,我想跳过特殊字符。 我不想限制特殊字符。 预期输出应为:- 1,234(总长度:- 4) Userna
我只是在忙着弄清楚 cakephp,看起来它会很有趣。 我有一个表单输入,如下所示: echo $form->input('Campaign.title', array('maxLength'=>'7
旧的 ng-maxlength="5"用于触发字段错误,但会继续允许用户输入。 maxlength="5"似乎在阻止输入。当我的表格上有 novalidate 时,这样做是否有 Angular ?当我
我对 AllenNLP 还很陌生,我目前正在使用它的预训练问答模型。我想知道它是否有 channel 长度限制以确保其性能?我知道 BERT 的最大长度为 512,并且会截断更长的段落。 我在 All
我正在处理 TFS 流程模板的自定义工作项,但收到错误指示我用于组控件的标签超过 MaxLength 值。谁能告诉我我可以贴在群组标签上的最大长度是多少? 最佳答案 如您所见,答案是 80。这是官方文
下面是我在注册和登录表单上使用的代码,限制用户输入有限数量的字符: $( "#limit1" ).attr('maxlength','11').on('input', function() { if
我使用的是 Entity Framework 4.3.1,代码优先,并在 SQL Profiler 中查看正在生成的查询。这是一个例子: 如您所见 - 它将参数指定为 nvarchar(max) 但在
我在互联网上发现输入的最大长度是: 524288 个字符 我找不到有关 textArea 的任何信息。 我需要传递一个最多 1 500 000 个字符的 var,因此我尝试找到类似于输入文本或可用于此
使用 jQuery 版本 1.2.3,我尝试在具有属性“maxlength”的 textarea 元素之后添加节点,但它不起作用: $("textarea[@maxlength]").after("A
我使用 Javascript 添加新的文本字段: var input = document.createElement("input"); input.type = "text"; input.nam
好的,所以我正在构建一个自定义注册页面,当然还涉及到 javascript 输入验证。 在该验证中,我使用了 maxlength 属性来验证输入的长度 - 这是一种双重安全,但很容易获得我认为的元素的
基本上,我正在向所有文本框动态添加 maxLength,但我想向那些没有 maxLength 的文本框添加默认 maxLength属性集。 如何使用 jquery、javascript 完成此操作?
我的 html 页面有问题 这里是页面的简化版本 function maxLength() {
我对 ASP.NET MVC3 客户端验证有一个奇怪的问题。我有以下类(class): public class Instrument : BaseObject { public int Id
我在 Vue 中有一个表单,由于电话号码输入的样式原因,它有一些组合输入。 我的问题是用户必须点击 Tab 键才能转到电话号码的下一个输入字段。 有没有办法检查当前和输入的最大长度,并在满足时转到下一
我是一名优秀的程序员,十分优秀!