jQueryでフォームのsubmit処理前に任意の処理を記述したい場合、以下のように書くのだが、このコードには一つ問題がある。。

$(function(){
  $('#submit-button').click(function(){
    // submit前の処理
    // code...

    $('#form').submit();
  });
});

上記のコードだと、HTML側で以下のようにinputタグにrequire属性を用いたバリデーションをおこなっていた場合、バリデーションが無視されてsubmit処理が走ってしまうのだ。

<form id="form" method="POST" action="">
  <input type="text" name="name" value="" required>

  <input type="submit" id="submit-button" value="送信">
</form>

この問題について、次のコード6~8行目を追加することで解消することができる。

$(function(){
  $('#submit-button').click(function(){
    // submit前の処理
    // code...

    if(!$('#form')[0].reportValidity()) {
      return false;
    }

    $('#form').submit();
  });
});

reportValidityメソッドは、任意のタイミングでフォーム全体の検証を行いその結果を返すメソッドで、上記のif文は検証に失敗した場合に処理を終了させることを意味している。