2017-10-02 2 views
1

私は非常に大きなフォームを持ち、いくつかのセクションが別々のフォームグループとして表されています。各セクションの終わりに、私はすべての入力にぼかしをかけるAngular2 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(); 
    }); 
    } 

を次のようにこれまでのところそれはそれは正常に動作しますが、私の一般的なバリデータをチェックしているためと検証メッセージを処理し、そのフォームグループ内のすべてのコントロールの有効性をチェックチェックボタンを持っています各コントロールの入力ブラーイベントでは、コントロールのフォーカスとブラーの後まで、検証メッセージ自体はポップアップしません。だからフォームグループの各フォームコントロールでブラーイベントをトリガーする上記のメソッドに何かを追加したいと思いますが、私はそれをどうやって行うのか理解できませんでした。

document.getElementById( "myAnchor")。blur(); W3Schoolsから、idで要素を取得して、それをblur()のようにトリガする方法を示します。上記の方法を使用すると、ForEachを使用してFormGroup内のすべての要素にアクセスして、すべての要素をぼかすことができますか? (入力、テキストエリア、ラジオボタン、チェックボックス)

ご注意ください。

+0

あなたは 'document.activeElement.blur()'を試すことができます – yurzui

+0

FormGroupのすべての要素をトラバースする方法はありますか? – David

+0

いいえ、FormGroupには要素への参照がありません。彼らは橋を介して接続されています。 1つの方法は猿のパッチを適用することです – yurzui

答えて

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(); 
}); 
} 

これは正しく私が集中する必要があり、その後、これを実現するための任意のコントロールにぼかします以前にフォームグループ内の各コントロールの下で検証エラーメッセージが表示されます。

関連する問題