Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.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 AngularJS自定义验证不起作用_Javascript_Angularjs_Validation_Angularjs Directive - Fatal编程技术网

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

时,也建议您提供一个复制问题的演示。出现这种情况的原因有很多,比如子范围问题我用HTMLHE
input
元素没有名称编辑了这篇文章。我想知道你为什么不使用.Angular 1.2.0、@zeroflagL,我需要特定的验证,然后你可以使用
$parsers
。(只)听
keyup
不是最好的主意。不过,你的方法是有效的。问题的最后一句令人困惑:如果所有输入都是有效的,那么表单当然也是有效的。它应该是
formCard.$valid
btw。