Javascript 从输入上的自定义指令如何使父窗体无效?

Javascript 从输入上的自定义指令如何使父窗体无效?,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我已经做了一个自定义指令来进行输入验证,现在该指令在大多数情况下都可以正常工作,但我所做的方式是在使用ctrl.$setValidity('validation',false)检查字段之前使其无效然后我验证字段,如果它有效,则将它的$setValidity更改为true。但我的问题是,当我在指令中使用onBlur事件时,因为我一开始键入字段,它就会变脏并显示为无效,即使我只是希望它在onBlur之后无效,所以我发现最好是使表单无效,而不是使每个字段无效。 因此,为了简短起见,如何找到输入元素的父

我已经做了一个自定义指令来进行输入验证,现在该指令在大多数情况下都可以正常工作,但我所做的方式是在使用
ctrl.$setValidity('validation',false)检查字段之前使其无效
然后我验证字段,如果它有效,则将它的
$setValidity
更改为
true
。但我的问题是,当我在指令中使用
onBlur
事件时,因为我一开始键入字段,它就会变脏并显示为无效,即使我只是希望它在
onBlur
之后无效,所以我发现最好是使表单无效,而不是使每个字段无效。

因此,为了简短起见,如何找到输入元素的父表单并将其设置为无效?

当知道表单名称时,我知道我可以这样做
scope.myFormName.$setValidity('validation',false),它是有效的,但我试图成为泛型,自己找到表单对象,然后使其无效。我正在尝试循环使用
elm.parent()
,但还没有太大的成功…我正在尝试使用jqLite尽可能保持通用性。

编辑
我有一些代码工作,但它不是完全干净的代码,有人有更好的方法吗

var j = 0;
var parentElm = elm.parent();
var parentFormElm = null;
do {
  if(parentElm.prop('tagName').toUpperCase() === "FORM") {
    parentFormElm = parentElm;
    break;
  }      
  parentElm = parentElm.parent(); // next parent
}while(parentElm !== "form" && j++ < 50);

scope[parentFormElm.prop('name')].$setValidity('validation', false);
var j=0;
var parentElm=elm.parent();
var parentFormElm=null;
做{
if(parentElm.prop(‘标记名’).toUpperCase()=“FORM”){
parentFormElm=parentElm;
打破
}      
parentElm=parentElm.parent();//下一个父对象
}while(parentElm!=“form”&&j++<50);
范围[parentFormElm.prop('name')]。$setValidity('validation',false);

因为这只是一个样式化的问题(如评论中所指出的),所以您可以调整Angular的CSS类,这样输入字段只有在不聚焦时才会高亮显示:

.ng-invalid.ng-dirty:not(:focus) {
  background-color: #ff7373;
}

如果您负担不起使用CSS3选择器,则需要两个CSS类:

.ng-invalid.ng-dirty {
  background-color: #ff7373;
}

.ng-invalid.ng-dirty:focus {
  background-color: #fff;
}

如果您只是想在触发
onBlur
后使字段无效,为什么不在该事件发生时验证它呢?因为如果我不使表单无效,并且我使用的是
onBlur
表单在我启动时显示为有效,并且我的提交按钮处于启用状态,这当然是错误的事实……因此,当用户开始键入时,您希望表单无效,但您只希望输入本身无效在它失去焦点后?不完全是这样,我宁愿让表单一开始就无效,而不使输入无效(因为它们仍然没有被触及)。如果只是样式化的问题(并且不需要IE8支持)我想每个可能的状态都可以有不同的CSS类:
.ng invalid:focus
.ng invalid:not(:focus)
。非常好,很好地了解了CSS3和备选方案。。再次感谢