将字段设置为dirty以在Angular JS中触发验证

时间:2014-06-04 23:58:18

标签: jquery angularjs validation

我试图获取表单中的所有字段并将其设置为脏。

这样的事情:

 $timeout(function () {

        $('input').each(function(){

             $(this).$dirty=true;

        });
    }, 0);

这不起作用。我明白这样的事情很好用:

$scope.form.uName.$dirty = true;

但是当我使用jquery遍历所有字段时,出现了问题。

这是小提琴:http://jsfiddle.net/Qdk5M/1302/

感谢任何帮助。谢谢..

3 个答案:

答案 0 :(得分:7)

自AngularJS 1.3.4起,您可以在字段(source)上使用 $ setDirty()。例如,对于有错误且标记为必需的所有字段,您可以执行以下操作:

angular.forEach($scope.form.$error.required, function(field) {
    field.$setDirty();
});

答案 1 :(得分:0)

Jquery元素和Angular表单控制器是完全不同的东西。 Jquery元素没有$ dirty属性,form指令控制器中的变量具有该属性。您必须使用您发布的第二个脚本位。

答案 2 :(得分:0)

创建一个带有link函数的指令,该函数遍历表单属性。使用匹配来避免任何包含$的表单对象属性只能访问表单字段。将这些$dirty属性设置为true

.directive('makeDirty', function(){
    return function(scope, elem, attr) {
        angular.forEach(scope.form, function(val, key){
            if(!key.match(/\$/)) {
                val.$dirty = true;
            }
        });
        scope.form.$setDirty(); // you can make the form itself $dirty if you wish to
    }
});

Updated Fiddle

这里使用指令的优点是在表单准备好之前它不会运行链接代码;通过一些小的重构,它也可以在多个表单/控制器中重用。