Bootstrap 3モーダルウィンドウを用いた動的データ編集手法

Bootstrap 3のモーダルコンポーネントを活用したデータ編集機能の実装方法について解説します。主にDOM要素経由でのデータ取得とAJAX通信を比較し、実践的なコード構造を提示します。

データ属性を活用したモーダル初期化

テーブル表示部分で編集ボタンにカスタムデータ属性を設定します。Laravel Bladeテンプレートでの実装例:

<tbody>
  @foreach ($items as $item)
  <tr>
    <td>{{ $item->title }}</td>
    <td>{{ Str::limit($item->content, 35) }}</td>
    <td>
      <button 
        data-item-id="{{ $item->id }}"
        data-title="{{ $item->title }}"
        data-content="{{ $item->content }}"
        data-deadline="{{ $item->deadline }}"
        class="btn btn-primary edit-trigger"
        data-toggle="modal" 
        data-target="#editModal"
      >編集</button>
    </td>
  </tr>
  @endforeach
</tbody>

イベントハンドリングによるデータ反映

show.bs.modalイベントをフックし、モーダル内要素にデータを注入するスクリプト:

$(document).ready(function() {
  $('#editModal').on('show.bs.modal', function(event) {
    const triggerBtn = $(event.relatedTarget);
    const modal = $(this);
    
    modal.find('[name="itemId"]').val(triggerBtn.data('item-id'));
    modal.find('.title-input').val(triggerBtn.data('title'));
    modal.find('.content-area').val(triggerBtn.data('content'));
    modal.find('.deadline-picker').val(triggerBtn.data('deadline'));
  });
});

モーダルフォームの構造設計

動的に値を設定するための入力フィールドを備えたモーダル実装:

<div class="modal fade" id="editModal" tabindex="-1">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title">データ編集</h5>
      </div>
      <form method="POST" action="/api/tasks/update">
        @csrf
        <div class="modal-body">
          <input type="hidden" name="itemId">
          
          <div class="form-group">
            <label>タイトル</label>
            <input type="text" class="form-control title-input" name="title" required>
          </div>
          
          <div class="form-group">
            <label>詳細内容</label>
            <textarea class="form-control content-area" name="content" rows="3" required></textarea>
          </div>
          
          <div class="form-group">
            <label>期限日</label>
            <input type="text" class="form-control deadline-picker" name="deadline" required>
          </div>
        </div>
        <div class="modal-footer">
          <button type="button" class="btn btn-secondary" data-dismiss="modal">キャンセル</button>
          <button type="submit" class="btn btn-primary">更新</button>
        </div>
      </form>
    </div>
  </div>
</div>

<script>
  $('.deadline-picker').datetimepicker({
    timepicker: false,
    format: 'Y-m-d',
    lang: 'ja'
  });
</script>

タグ: Bootstrap3 laravel jQuery ModalDialog

7月26日 17:41 投稿