Javascript AngularJS自定义验证不起作用
我有三个输入,每个输入都需要自定义验证。 所以我做了一个这样的指令来验证它们:Javascript AngularJS自定义验证不起作用,javascript,angularjs,validation,angularjs-directive,Javascript,Angularjs,Validation,Angularjs Directive,我有三个输入,每个输入都需要自定义验证。 所以我做了一个这样的指令来验证它们: function CardValidator(ValidatorService) { return { restrict: 'A', require: 'ngModel', link: function($scope, $element, $attrs, ngModel) { $element.on('keyup', function(e
function CardValidator(ValidatorService) {
return {
restrict: 'A',
require: 'ngModel',
link: function($scope, $element, $attrs, ngModel) {
$element.on('keyup', function(e) {
var isValid = ValidatorService.checkValidity(e.target.value);
ngModel.$setValidity($attrs.ngModel, isValid);
});
}
}
}
这是我的HTML:
<form method="post" autocomplete="off" name="formCard" novalidate>
<div class="row field">
<i class="icon icon-cpf"></i>
<input type="text" ng-model="vm.card.number" name="card" card-validator mask="9999 9999 9999 9999" required>
<label>cartão</label>
</div>
<div class="group">
<div class="row field field-medium left">
<i class="icon icon-cpf"></i>
<input type="text" ng-model="vm.card.expireDate" card-valid-thru-validator mask="99/99" required>
<label>validade MM/AA</label>
</div>
<div class="row field field-medium field-last right">
<input type="text" ng-model="vm.card.cvv" card-security-code-validator required>
<label>CVV</label>
</div>
</div>
</form>
卡托
validade MM/AA
CVV
以下是三个字段均有效后的HTML:
<form method="post" autocomplete="off" name="formCard" novalidate="" class="ng-dirty ng-valid-vm.card.number ng-valid-vm.card.expire-date ng-valid-required ng-valid ng-valid-vm.card.cvv">
输入工作正常,AngularJS将
ng valid
和ng invalid
放在它应该放的地方。但是表单作为一个整体不起作用。当我调用form.$valid
时,它总是返回true,即使3个输入字段使用ng valid
时,也建议您提供一个复制问题的演示。出现这种情况的原因有很多,比如子范围问题我用HTMLHEinput
元素没有名称编辑了这篇文章。我想知道你为什么不使用.Angular 1.2.0、@zeroflagL,我需要特定的验证,然后你可以使用$parsers
。(只)听keyup
不是最好的主意。不过,你的方法是有效的。问题的最后一句令人困惑:如果所有输入都是有效的,那么表单当然也是有效的。它应该是formCard.$valid
btw。