【问题标题】:jquery Datatables checkbox get all checked rowsjquery Datatables 复选框获取所有选中的行
【发布时间】:2017-07-28 05:49:23
【问题描述】:

我有一个数据表,我试图在其中获取所有已检查的行。该表具有行分组并使用来自gyrocode 的复选框插件。我已经尝试了api 上列出的代码,但我没有运气。无论选择什么,我都只会返回第一条记录。我使用的代码如下所示:

var tbl;
$(document).ready(function (){
          tbl = $('#example').DataTable({
            columnDefs: [{
                targets: 0,
                data: 2,
                'checkboxes': {
                    'selectRow': true
                }
            },
            { "visible": false, "targets": 1 }],
            select: {
                style: 'multi'
            },
            order: [[1, 'asc']],
            iDisplayLength: 10,
            drawCallback: function () {
                var api = this.api();
                var rows = api.rows({ page: 'current' }).nodes();
                var last = null;

                api.column(1, { page: 'current' }).data().each(function (group, i) {
                    if (last !== group) {
                        $(rows).eq(i).before(
                            '<tr class="group"><td colspan="6">' + group + '</td></tr>'
                        );
                        last = group;
                    }
                });
            }
        });
});

function getSelected(){
    alert(tbl.columns().checkboxes.selected().length);
}

我的jfiddle 中有代码。我不确定它们是否是复选框和行分组之间的干扰?请让我知道我哪里出错了。

注意:复选框是基于 gyrocode 插件的数据表是 1.10.12 版本

【问题讨论】:

  • 那是什么问题?你的问题不是很清楚
  • 它似乎确实有效,如果您执行console.log(tbl.columns().checkboxes.selected()),您可以看到有一个数组包含唯一的选定学生ID。如果您每行使用不同的 ID,我可以看到它在工作。 length 属性不是您想要的。
  • 您需要改用column(0).checkboxes.selected()。此外,您在表中有重复的 id,这会影响总数。
  • 也可以。谢谢你的澄清。

标签: javascript jquery checkbox datatables


【解决方案1】:

我来不及回答这个问题了。但我的回答可以帮助社区中的其他人。

//datatable has to be initialized to a variable
var myTable = $('#calltable').dataTable();

//checkboxes should have a general class to traverse
var rowcollection = myTable.$(".call-checkbox:checked", {"page": "all"});

//Now loop through all the selected checkboxes to perform desired actions
rowcollection.each(function(index,elem){
    //You have access to the current iterating row
    var checkbox_value = $(elem).val();
    //Do something with 'checkbox_value'
});

希望对你有帮助。

【讨论】:

  • 这段代码解决了我没有在所有页面上获取复选框的所有 id 的问题。只是为了说明上面代码中的明显[.call-checkbox]是一个需要在生成表数据时附加的类。
  • 感谢您对我的帮助,我正在努力寻找适合我的代码的答案,这对您有很大帮助
【解决方案2】:

我快速检查了一下,Eric Guan 是正确的。我只是发布一个代码sn-p:

function getSelected() {
   var selectedIds = tbl.columns().checkboxes.selected()[0];
   console.log(selectedIds)

   selectedIds.forEach(function(selectedId) {
       alert(selectedId);
   });
}

见:https://jsfiddle.net/nwmmbLso/3/

我刚刚注意到您有重复的学生 ID,这也可能导致您正在使用的库出现意外行为。如果学生 ID 是唯一的,上面提供的代码应该可以工作。

【讨论】:

  • 我是上述插件的作者。关于重复 ID 的好答案和要点。但是,如果只访问一列数据,推荐的方法是使用column(0).checkboxes.selected(),尽管您的代码也可以工作。
  • 这是 [0],我不知道。谢谢你的澄清。
  • 查看这个 jsbin 以获取行节点和数据表所有页面中所有检查的行。 live.datatables.net/mutavegi/34/edit
【解决方案3】:

工作和测试。

      var id = "";
      var oTable = $(".table").dataTable();

      $(".check_quality:checked", oTable.fnGetNodes()).each(function() {
          if (id != "") {
              id = id + "," + $(this).data('id');
          } else {
              id = $(this).data('id');
          }
      });

【讨论】:

  • 虽然这可能会回答这个问题,但您应该 edit 您的回答包括一些关于此代码如何回答问题的解释,以便为未来的用户提供上下文。代码块本身不会立即对以后遇到相同问题的人有用。
【解决方案4】:

对于今天仍在寻找答案的人们

var rowcollection = table.columns(0).context[0].checkboxes.s.data;

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
【解决方案5】:

简单的答案 - 使用 table.rows( '.selected' ) 或 table.rows( {selected:true} )

var count = $('#datatable').DataTable().rows( '.selected' ).count();

var checked_rows = $('#datatable').DataTable().rows( '.selected' ).data();

for(var i=0; i<checked_rows.length; i++)
{
  console.log( checked_rows[i] );               
}

文档链接:https://datatables.net/reference/api/count()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 2017-07-15
    • 2017-12-17
    • 1970-01-01
    相关资源
    最近更新 更多