所有输入Angular2 Reactive Forms上的触发模糊

时间:2017-10-02 19:06:51

标签: angular blur angular-reactive-forms

我有一个非常大的表单,其中许多部分表示为单独的表单组。在每个部分的末尾,我有一个检查按钮,用于检查该表单组中所有控件的有效性,到目前为止,它如下所示

checkValidity(g: FormGroup) {
    Object.keys(g.controls).forEach(key => {
      g.get(key).markAsDirty();
    });
    Object.keys(g.controls).forEach(key => {
      g.get(key).markAsTouched();
    });
  }

它运行正常,但是因为我的通用验证器检查并处理每个控件上的验证消息'输入模糊事件,验证消息本身不会弹出,直到我对焦并模糊控件。所以我想在上面的方法中添加一些东西,在表单组中的每个Form控件上触发一个blur事件,但我还没有弄清楚我会怎么做。

的document.getElementById(" myAnchor&#34)。模糊();来自W3Schools显示我如何通过id获取元素并以此方式触发它的模糊()。使用上面的方法,我是否能够使用forEach访问FormGroup中的所有元素以触发所有内容的模糊? (输入,textareas,单选按钮和复选框)

请知道。

1 个答案:

答案 0 :(得分:2)

我刚刚想出了解决这个问题的方法,它不涉及触发模糊或任何DOM事件。在发现上一个问题的updateValueAndValidity()后,我在表单组中的每个控件上调用它,就像我将所有控件标记为脏并触及问题一样。演示如下。

  checkValidity(g: FormGroup) {
Object.keys(g.controls).forEach(key => {
  g.get(key).markAsDirty();
});
Object.keys(g.controls).forEach(key => {
  g.get(key).markAsTouched();
});
Object.keys(g.controls).forEach(key => {
  g.get(key).updateValueAndValidity();
});
}

这会在表单组中的每个控件下正确显示验证错误消息,之前我必须对焦,然后在任何控件上模糊以实现此目的。