如何捕获使用DataTables插件分页的复选框的值

时间:2016-08-04 11:12:44

标签: jquery checkbox datatables

我的表格如下:enter image description here

正如您所看到的那样,用户旁边有一些复选框,如果选中这些值,我需要抓住它们。在没有足够的用户分页工作之前,我使用此代码完成了它:

var cbChecked = new Array();
$("input[type='checkbox']:checked").each(function () {
      cbChecked[cbChecked.length] = this.value;
});

但由于我正在使用DataTables插件,并且分页用户分割,jQuery只能看到当前页面上显示的那些复选框,即使我在表格的第2页上检查了两个以上的用户。当我检查页面时,我发现在DOM中实际上只显示了这些人,其他人甚至都没有隐藏。任何建议如何捕捉我表中所有选中的复选框?

1 个答案:

答案 0 :(得分:1)

以下是适用于此类问题的代码:

var tableUsers = $('#showUsersTable').DataTable({
            searching:false,
            "sPaginationType": "full_numbers",
            "bPaginate": true,
            "bLengthChange": true,
            "bFilter": true,
            "bSort": false,
            "bInfo": true,
            "bAutoWidth": false,
            "bProcessing": true
        });

首先实例化DataTables。这些属性并不重要,我需要它们用于其他东西。

var rows = tableUsers.rows({ 'search': 'applied' }).nodes();

此变量rows包含所有td元素,即使它们未显示在页面上且在DOM中不可见。

            $('input[type="checkbox"]', rows).each(function(i,e){
                $(e).change(function(){
                    var checkBoxC = [];
                    var cbChecked = new Array();
                    $('input[type="checkbox"]:checked', rows).each(function(o,a){
                        checkBoxC[checkBoxC.length]=$(a).val();
                        $.each(checkBoxC, function(h, el){
                            if($.inArray(el, cbChecked) === -1) cbChecked.push(el);
                        });
                    });
                    $("input#cbChecked").val(cbChecked.join());
                });
            });

由于cbCheckedchange函数内声明,我需要将它的值放入隐藏的DOM元素(input#cbChecked)中,所以我可以在变更范围之外使用它功能。