【问题标题】:Add data from a datatable to a modal in laravel在 laravel 中将数据从数据表添加到模态
【发布时间】:2020-12-01 15:13:33
【问题描述】:

西班牙语版本让我失望了,所以我会在这里测试我的运气

我有以下代码,我想知道如何将数据从我的表传递到模态

这是我在 edit.blade.php 中的代码。模态确实有效,但我不知道如何使数据显示在模态中,我将自己对数据库进行 POST 但我只想知道如何使该数据显示以便我可以对其进行编辑。

我希望出现在模态中的数据是 id、姓名和电子邮件。

这是我在editar.blade.php中的代码

<script src="{{ url('/js/vendor/jquery-1.12.4.min.js') }} "></script>
<script src="{{ url('/js/bootstrap.min.js') }} "></script>
<link rel="stylesheet" href="{{ url('/css/bootstrap.min.css') }} ">
<script src="{{ url('/js/jquery.dataTables.min.js') }} "></script>
<div class="container">
  <h2>Editar estudiante</h2>

<div class="container">
               <h2>Laravel DataTables Tutorial Example</h2>
               <table id="user_table" class="table table-bordered table-striped">
     <thead>
      <tr>
                <th width="35%" id="name">Name</th>
                <th width="35%" id="email">Email</th>
                <th width="30%">Action</th>
      </tr>
     </thead>
    </table>
</div>

<div class="modal fade" id="edit-modal" tabindex="-1" role="dialog" aria-labelledby="edit-modal-label" aria-hidden="true">
  <div class="modal-dialog modal-lg" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="edit-modal-label">Edit Data</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body" id="attachment-body-content">
        <form id="edit-form" class="form-horizontal" method="POST">
          <div class="card text-white bg-dark mb-0">
            <div class="card-header">
              <h2 class="m-0">Edit</h2>
            </div>
            <div class="card-body">
              <!-- id -->
                <input type="hidden" name="modal-input-id" class="form-control" id="modal-input-id" required>
              <!-- /id -->
              <!-- name -->
              <div class="form-group">
                <label class="col-form-label" for="modal-input-name">Name</label>
                <input type="text" name="modal-input-name" class="form-control" id="modal-input-name" required autofocus>
              </div>
              <!-- /name -->
              <!-- description -->
              <div class="form-group">
                <label class="col-form-label" for="modal-input-description">Email</label>
                <input type="text" name="modal-email" class="form-control" id="modal-input-email" required>
              </div>
              <!-- /description -->
            </div>
          </div>
        </form>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-primary" data-dismiss="modal">Done</button>
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
      </div>
    </div>
  </div>
</div>

<script type="text/javascript">
$(document).ready(function(){

  $('#user_table').DataTable({
  processing: true,
  serverSide: true,
  ajax: {
   url: "{{ route('getdata') }}",
  },
  columns: [
   {
    data: 'name',
    name: 'name',
    className: 'user-name',
   },
   {
    data: 'email',
    name: 'email',
    className: 'user-email',
   },
   {
    data: 'action',
    name: 'action',
    orderable: false
   }
  ]
 });

 $(document).on('click', "#edit-item", function() {
    //obtenemos la instancia de la fila
    $tr = $(this).closest('tr');
    
    //rellenamos los campos en el modal
    $('#modal-input-name').val($('user-name', $tr).text());
    
    $('#modal-input-email').val($('user-email', $tr).text());
    
    // Mostramos el modal
    $('#edit-modal').modal('show');
  })

  // on modal hide
  $('#edit-modal').on('hide.bs.modal', function() {
    $('.edit-item-trigger-clicked').removeClass('edit-item-trigger-clicked')
    $('#edit-form').trigger('reset');
  })


});
</script>

这是我在 web.php 中的获取路径

Route::get('/editar', 'AdminController@editar')->name('editar');

这是我将数据带到 AdminController.php 中的数据表的函数

public function getPosts(Request $request)
{
    if($request->ajax()){
        $data = StudentModel::latest()->get();
        return DataTables::of($data)
                ->addColumn('action', function($data){
                    $button = '<button id="edit-item" type="button" name="edit-item" data-target-id="'.$data->id.'" class="edit btn btn-primary btn-sm" data-toggle="modal" data-target="edit-modal">Edit</button>';
                    $button .= '&nbsp;&nbsp;&nbsp;<button type="button" name="edit" data-target-id="'.$data->id.'" class="delete btn btn-danger btn-sm">Delete</button>';
                    return $button;
                })
                ->rawColumns(['action'])
                ->make(true);
    }
    return view('editar');
}

【问题讨论】:

  • 你确定模态有效吗?对于按钮,您的js 中有name="edit-item" 您正在使用#edit-item,它的目标是id 我看不到按钮的id
  • 该模式确实有效,但我会检查一下。我添加了 id

标签: php laravel datatable


【解决方案1】:

你可以试试这个吗?

   $('#modal-input-name').val($tr.find('td.user-name').text());

   $('#modal-input-email').val($tr.find('td.user-email').text());

我还建议您使用css class 来定位点击事件,因为Id 通常用于唯一标识符,并且按照您的方式,您可以拥有许多具有相同@ 的表行987654325@ 违背了最初的想法。

【讨论】:

  • 实践建议...最好使用 html5 data 属性。如果有人重新设计应用程序,那么您只需要切换 data-* 属性即可工作,并且原始设计不会更改。
猜你喜欢
  • 2019-06-12
  • 2021-07-05
  • 2020-04-04
  • 2016-01-23
  • 2017-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-31
相关资源
最近更新 更多