TL; DR:古いブラウザを気にしませんか?を使用しform.reportValidity()
ます。
レガシーブラウザのサポートが必要ですか?読む。
実際に検証を手動でトリガーすることは可能です。
再利用性を向上させるために、答えにプレーンJavaScriptを使用します。jQueryは必要ありません。
次のHTMLフォームを想定します。
<form>
<input required>
<button type="button">Trigger validation</button>
</form>
そして、JavaScriptでUI要素を取得しましょう。
var form = document.querySelector('form')
var triggerButton = document.querySelector('button')
Internet Explorerなどのレガシーブラウザのサポートは必要ありませんか?これはあなたのです。
最新のブラウザはすべて、要素のメソッドをサポートしreportValidity()
ていform
ます。
triggerButton.onclick = function () {
form.reportValidity()
}
これで完了です。また、このアプローチを使用した簡単なCodePenもここにあります。
古いブラウザへのアプローチ
以下は、reportValidity()
古いブラウザでどのようにエミュレートできるかについての詳細な説明です。
ただし、これらのコードブロックを自分でプロジェクトにコピーして貼り付ける必要はありません。ポニーフィルやポリフィルがすぐに利用できます。
reportValidity()
がサポートされていない場合は、ブラウザーを少しトリックする必要があります。それで、私たちは何をしますか?
- 呼び出してフォームの有効性を確認します
form.checkValidity()
ます。これにより、フォームが有効かどうかがわかりますが、検証UIは表示されません。
- フォームが無効な場合、一時的な送信ボタンを作成し、クリックをトリガーします。フォームが無効であるため、実際には有効ではないことがわかります送信、ユーザーに検証のヒントが表示されます。一時的な送信ボタンはすぐに削除されるため、ユーザーには表示されません。
- フォームが有効であれば、ユーザーに干渉してユーザーに処理を進める必要はまったくありません。
コードで:
triggerButton.onclick = function () {
// Form is invalid!
if (!form.checkValidity()) {
// Create the temporary button, click and remove it
var tmpSubmit = document.createElement('button')
form.appendChild(tmpSubmit)
tmpSubmit.click()
form.removeChild(tmpSubmit)
} else {
// Form is valid, let the user proceed or do whatever we need to
}
}
このコードは、ほとんどすべての一般的なブラウザーで機能します(IE11までテストを成功させました)。
これがCodePenの実際の例です。