如何在jquery数据表分页中选择记录

时间:2017-01-30 10:04:50

标签: jquery datatable datatables struts2-jquery

我正在尝试在jquery数据表中发送所有记录,当我单击选择所有(超链接)选项或我想要特定页面中的特定记录(使用复选框)到服务器类但问题是当我单击表单提交按钮即导出PDF即使在jquery数据表分页中的其他页面中选择的记录,也仅从当前页面获取记录

为什么在jquery数据表的不同页面中选择的记录不会发送到java类

https://jsfiddle.net/4n5o3r3e/

<s:form id="downloadStudentDetailsForm" action="downloadStudentDetails" theme="css_xhtml" cssClass="form-horizontal">

<div class="dataTable_wrapper">
<table width="100%" class="table table-striped table-bordered table-hover" id="dataTS">
<thead>
<tr>
<th><a href="#" id="bas">Select all</a></th>
<th>Student Name</th>
<th>Parent Phone</th>   
<th>Parent Email</th>                                                       
<th>ReferenceID</th>
</tr>
</thead>
<tbody>
<s:iterator value="studentRecords">
<tr>
<td><s:checkbox name="students" cssClass="case chkPassport" fieldValue="%{studentname+' '+phone+' '+email+' '+ref}"  /></td>                                                            
<td><s:property value="studentname" /></td> 
<td><s:property value="phone" /></td>   
<td><s:property  value="email"></td>                                                        
<td><s:property value="ref" /></td>
 </tr>
 </s:iterator>
 </tbody>
 </table>
 </div>
 <div class="col-xs-1 ">
 <s:submit cssClass="btn btn-success" value="Export to Excel" id="exl" action="downloadStudentsListINExcel" />
 </div>
 <div class="col-xs-3 ">
 <s:submit cssClass="btn btn-danger" value="Export to PDF" id="pdf" action="downloadStudentsListInPDF" />
 </div>                                             </s:form>   

enter image description here

2 个答案:

答案 0 :(得分:2)

我希望我理解正确,您希望在单击全选按钮时选择所有行,并将所选行的计数发送到服务器。

这是 Working Demo

所以我使用datatables api做了这个(你将弄清楚如何将计数发送到服务器):

$(document).ready(function() {
   var table =  $('#example').DataTable();

$("#selectall").click(function() {
    var rows = table.rows({ 'search': 'applied' }).nodes();

   debugger;
   if($('input:checked', rows).length == rows.length){
     $('input[type="checkbox"]', rows).prop('checked', false);
    }
    else{
     $('input[type="checkbox"]', rows).prop('checked', true);
   }


$('#dvcount').html($(rows).find("input:checked").length);

$("body").on("change","input",function() {

    var rows = table.rows({ 'search': 'applied' }).nodes();
    $('#dvcount').html($(rows).find("input:checked").length);

});

  } );

答案 1 :(得分:0)

我开始以不同的方式解决它,但我认为上面的答案是最优雅的。我查看了基础数据并改变了:

$(document).ready(function() {
  let runningTotal = 0;
  let table = $('#example').DataTable();
  $("#selectall").click(function() {
    if (runningTotal == table.rows().count()) {
      table.rows().every(function(rowIdx, tableLoop, rowLoop) {
        let clone = table.row(rowIdx).data().slice(0);
        clone[[clone.length - 1]] = '<input type="checkbox" class="record">'
        table.row(rowIdx).data(clone);
      });
    } else {
      table.rows().every(function(rowIdx, tableLoop, rowLoop) {
        let clone = table.row(rowIdx).data().slice(0);
        clone[[clone.length - 1]] = '<input type="checkbox" class="record" checked="checked">'
        table.row(rowIdx).data(clone);
      });
    }
    runningTotal = 0;
    table.rows().every(function(rowIdx, tableLoop, rowLoop) {
      var data = this.data();
      if ($(data[data.length - 1]).prop("checked")) {
        runningTotal++
      }
    });
    $('#dvcount').html(runningTotal);
  });
  $('#example tbody').on("click", ".record", function() {
    let clone = table.row($(this).closest('tr')).data().slice(0);
    let checkbox = clone[clone.length - 1];
    if ($(checkbox).prop("checked")) {
      clone[[clone.length - 1]] = '<input type="checkbox" class="record">'
    } else {
      clone[[clone.length - 1]] = '<input type="checkbox" class="record" checked="checked">';
    }
    table.row($(this).closest('tr')).data(clone);
    runningTotal = 0;
    table.rows().every(function(rowIdx, tableLoop, rowLoop) {
      var data = this.data();
      if ($(data[data.length - 1]).prop("checked")) {
        runningTotal++
      }
    });
    $('#dvcount').html(runningTotal);
  });
  $("#export").on("click", function() {
    let exportedRows = [];
    table.rows().every(function(rowIdx, tableLoop, rowLoop) {
      let data = table.row(rowIdx).data()
      if ($(data[data.length - 1]).prop("checked")) {
        exportedRows.push(data.slice(0, -1));
      }
    });
    console.log(exportedRows);
  });
});

这是一个working JSFiddle。