我想向我的用户展示两种类型的验证:
- 当他们在输入字段中输入时,如果当前值无效,我希望在输入旁边显示一个友好的灰色/黑色提示框
- 然后,当他们模糊输入时,如果输入的值仍然无效,我想将提示的样式更改为更传统的红色提示。当他们回到输入来修复它时,我想回到 #1 中的友好提示。
我想重用提示框以减少混乱(这意味着我不想要div
提示的友好版本和div
完全相同的验证失败的传统版本),我想使用 Angular 的验证标记(ng-maxlength
,ng-pattern
等)让我以有用的方式响应用户的输入,例如如果他们在“年龄”输入中输入文本时说“仅数字”,或者如果他们在输入中说“那个值太高”尝试将“1000”作为年龄。
我有一个工作示例(排序),但我觉得可能有更好的方法来做到这一点,(也许使用指令?)但如果没有别的,我不明白为什么我当前的解决方案失败了。我想我只是在 jquery 选择器中遗漏了一些东西,但任何帮助都会很棒。
具体来说,当用户在输入中键入时,友好提示的样式不正确。简单的jquery修复?关于更简洁的解决方案的任何想法?提前致谢。
html:
<body ng-controller="MyCtrl">
<label class="control-label">Number of Dependents:</label>
<form name="demographicsform">
<div ng-class="{true: 'control-group error', false: 'control-group'}[demographicsform.dependents.$invalid]">
<input type="text"
class="mini-input control"
id="dependents"
name="dependents"
ng-model="demographicsHolder.dependents"
ng-pattern="/^([1-9][0-9]?|)$/"
ng-change="change('dependentsValidation')"
maxlength="2"
required />
<!-- This error should fire when the input is the wrong type (text/number/etc) or format-->
<div class="validation-err help-inline error"
name="dependentsValidationPattern"
ng-show="demographicsform.dependents.$error.pattern">
A 2 digit number is required
</div>
<!-- This error should fire when the input is empty -->
<div class="validation-err help-inline error"
name="dependentsValidationRequired"
ng-show="demographicsform.dependents.$error.required">
Required field
</div>
</div>
</form>
</body>
控制器:
var app = angular.module('myApp', []);
app.controller('MyCtrl', function($scope) {
$scope.demographicsHolder = {name:"bob",dependents:1};
$scope.change = function(validationDivs) {
$( validationDivs ).removeClass( ".validation-err" );
$( validationDivs ).addClass( ".validation-hint" );
$( "#" + elemId ).blur(function() {
$( "#" + elemId ).removeClass( ".validation-hint" );
$( "#" + elemId ).addClass( ".validation-err" );
});
};
});
CSS:
.validation-hint {
background-color: #0e0e0e;
}
.validation-err {
background-color: #ffe5e5;
}
验证按我的意愿工作,但我希望在用户实际在框中输入时显示提示并根据需要设置样式。