LoginSignup
0
0

More than 1 year has passed since last update.

モーダルでバリデーションのエラー時モーダルにエラーメッセージ表示

Last updated at Posted at 2022-12-23

今回の対応について

今回laravelを使用し、モーダル画面で送信ボタンが押下された時にバリデーションチェックを行い、
モーダル画面にメッセージを表示するという事をしたく、実装を行いました。

  • モーダル画面で送信を押下します。押下時はajax通信でcontrollerへ飛ばします。
  • FormRequestを作成し項目名のバリデーションを追加します。
  • controllerへ飛んできたときにバリデーションでひかかった場合は
    ajaxの方でfailとして受け取ります。バリデーションエラーのステータスは422です。
  • ステータスが422の時にメッセージを追加するように行いました。
modal_submit.js
$(document).on('click','#form_submit',function(event) {
  var $form = $('#form');
  var id = $('#id').val();
  $form.attr('action', '{{ url('aaaa/aaaa') }}/'+ id);
  // 操作対象のフォーム要素を取得
  $.ajax({
    headers: {
      'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    },
    url: $form.attr('action'),
    type: $form.attr('method'),
    data: $form.serialize(),
    datatype: 'json',
  })
  .done(function(data) {
    $('#modalForm').modal('hide');
  })
  .fail(function(error) {
    console.log('失敗');
    if (error.status === 422) {
      $.each(error.responseJSON, function(id, val) {
        $('#add_task_table').after(`<span class=\"help-block has-error\"> <strong>${val}</strong></span>`);
      });
    }
  });
});
modal_submit.php
<form id="form" action="" method="post">
  <div class="modal fade confirm-dialog" id="modalForm" tabindex="-1">
    <div class="modal-dialog" style="width:40%">
      <div class="modal-content">
        <div class="modal-header">
          <button type="button" class="close" data-dismiss="modal"> <span>×</span> </button>
          <h4 class="modal-title">登録モーダル<h4>
        </div>
        <input id="id" type="hidden" name="project_id" value="" />
        {{ csrf_field() }}
        <div class="modal-body">
          <table class="table table-bordered doc-base-table" id="add_task_table">
            <tr>
              <th>名前</th>
              <td>{{ Form::text( 'name', old('name'), ['class' => 'form-control']) }}</td>
            </tr>
            <tr>
              <th>名前2</th>
              <td>{{ Form::text( 'name2', old('name2'), ['class' => 'form-control']) }}</td>
            </tr>
          </table>
        </div>
        <div class="modal-footer" style="border-top:none;">
          <button type="button"class="btn btn-default btn-green btn-primary" id='form_submit'>登録</button>
          <button type="button" class="btn btn-default btn-green btn-primary" data-dismiss="modal">キャンセル</button>
        </div>
      </div>
    </div>
  </div>
</form>

responseJSONのはこのように入ってきます。

{
name: ['名前は必須です']
name2: ['名前2は必須です']
}

tableタグの下の表示するようにタグの下にメッセージは表示するように追加しました。

注意
追加するだけなので閉じるときなどにエラーメッセージを消去などは行っておりません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0