導入
HTML5にはrequired
やpattern
などの便利なバリデーション属性がありまして、submitするときにバリデーションしてくれるので便利です。
しかし、さまざまな事情により、javascriptやjQueryでsubmitさせる場合も多いかと思いますが、その場合、HTML5のバリデーションは無視されてしまいます。
とはいえ、実際にはHTML5のConstraint validation API
が動いており、バリデーションは機能していて、その結果を取得してあげれば、無視されずに済むようです。
コード
まず、無視されてしまう例です。
<form>
<input type="text" name="test" required>
</form>
{
// これだと値が空でもPOSTされてしまう。
$('form').submit();
}
以下が、無視されない例です。
reportValidity()
でバリデーションを通ったかどうかの結果を取得できます(通過していたらtrue
)。checkValidity()
というメソッドや、個別のフォーム要素ごとに結果を取得することもできますが、詳しくはドキュメントを参照ください。
$('form').reportValidity()
ではなく$('form')[0].reportValidity()
というとこにハマりました。特定のノードを指定しないといけないということでしょうね。素のJavaScriptはまだ弱いので想像ですが。
<form>
<input type="text" name="test" required>
</form>
{
if (! $('form')[0].reportValidity()) {
return false;
}
$('form').submit();
}
参考
https://developer.mozilla.org/ja/docs/Web/Guide/HTML/HTML5/Constraint_validation
https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement/reportValidity
追記
個別のフォーム要素のバリデーション結果を取得する例です。いつか使うかもしれないので、記載しておきます。
$('form').find('input, select, textarea').each(function () {
console.log($(this)[0].validity.valid);
});