正如您所看到的那样,用户旁边有一些复选框,如果选中这些值,我需要抓住它们。在没有足够的用户分页工作之前,我使用此代码完成了它:
var cbChecked = new Array();
$("input[type='checkbox']:checked").each(function () {
cbChecked[cbChecked.length] = this.value;
});
但由于我正在使用DataTables
插件,并且分页用户分割,jQuery只能看到当前页面上显示的那些复选框,即使我在表格的第2页上检查了两个以上的用户。当我检查页面时,我发现在DOM中实际上只显示了这些人,其他人甚至都没有隐藏。任何建议如何捕捉我表中所有选中的复选框?
答案 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());
});
});
由于cbChecked
在change
函数内声明,我需要将它的值放入隐藏的DOM元素(input#cbChecked
)中,所以我可以在变更范围之外使用它功能。