【问题标题】:laravel - Get all checked items in datatable on submitlaravel - 提交时获取数据表中所有选中的项目
【发布时间】:2023-04-02 15:55:01
【问题描述】:

我有一个步骤表单,其中包含 jQuery 数据表中的项目列表。用户将使用复选框选择他们想要的项目,然后单击下一步,所选项目将显示为最终确定。这是通过 ajax (form.serialize) 完成的。它有效,但是,只考虑在活动页面上选择的项目。例如。正在显示第 2 页,仅提交该页面中的复选框

我使用 foreach 来获取选中的项目

foreach($request->input('ItemNo') as $key => $item_no)

这是我的桌子

<table id="supplies_t" class="table table-striped">
  <thead>
    <tr>
      <th><input class="main_chkbx" name="main_chkbx" type="checkbox"></th>
      <th>Item Name</th>
      <th>Description</th>
      <th>Unit</th>
    </tr>
  </thead>
  <tbody>
    @if(isset($supplies))
      @foreach($supplies as $supply)
        <tr id="{{ $supply->ItemName }}">
          <td><input name="ItemNo[]" class="ind_chkbx" value="SUPPLY-{{ $supply->SupplyNo }}" type="checkbox"></td>
          <td>{{ $supply->ItemName }}</td>
          <td>{{ $supply->Description }}</td>
          <td>{{ $supply->UnitName }}</td>
        </tr>
      @endforeach
    @endif
  </tbody>
</table>

【问题讨论】:

  • 那么问题出在哪里?
  • 如我所说,仅提交活动页面中选中的复选框。前任。正在显示第 2 页,仅提交该页面中的复选框。
  • 因此,您需要将之前选择的项目存储在某个地方——例如,在会话中。
  • 我还在寻找其他选择。

标签: php jquery datatables laravel-5.2


【解决方案1】:

原因

出于性能原因,jQuery DataTables 会从 DOM 中删除不可见的行。提交表单时,仅将可见复选框的数据发送到服务器。

解决方案是使用$() API 方法来访问表中的所有元素。

解决方案 1. 提交表单

您需要在提交表单时将已检查且在 DOM 中不存在的元素 &lt;input type="checkbox"&gt; 转换为 &lt;input type="hidden"&gt;

var table = $('#example').DataTable({
   // ... skipped ...
});

$('form').on('submit', function(e){
   var $form = $(this);

   // Iterate over all checkboxes in the table
   table.$('input[type="checkbox"]').each(function(){
      // If checkbox doesn't exist in DOM
      if(!$.contains(document, this)){
         // If checkbox is checked
         if(this.checked){
            // Create a hidden element 
            $form.append(
               $('<input>')
                  .attr('type', 'hidden')
                  .attr('name', this.name)
                  .val(this.value)
            );
         }
      } 
   });          
});

解决方案 2:通过 Ajax 发送数据

var table = $('#example').DataTable({
   // ... skipped ...
});

$('#btn-submit').on('click', function(e){
   e.preventDefault();

   $.ajax({
      url: '/path/to/your/script.php',
      data: table.$('input[type="checkbox"]').serialize();
   }).done(function(data){
      console.log('Response', data);
   });
});

演示

查看jQuery DataTables: How to submit all pages form data了解更多详情和演示。

【讨论】:

  • 谢谢!我已经解决了,但忘了添加解决方案,所以感谢您的回答!顺便说一下方法1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多