jquery - Datatables Gyrocode 复选框扩展,根据条件设置每行的检查状态
问题描述
早上好,我有一个应用程序,它有多个带有复选框的列,使用 datatables gyrocode 复选框扩展。如果单元格中的值为 1,我在表单加载时使用 rowCallback 函数设置每列的选中状态。在设置选中状态的同时,我将同一行上的 ID 值推送到一个数组,该数组稍后用于比较在每个复选框上未选中“全选”复选框时要重新检查的行柱子。我的问题是当数组中的 ID 值与行中的 ID 值匹配时,我似乎无法重新选中复选框。其他一切正常,但我正在使用的这行代码似乎没有设置复选框状态:
$('td:nth-child(9) input', rowPAE).attr('checked','checked');
但是,如果我使用 render: 函数来初始化复选框,则上面的行确实有效,并且如果 ID 匹配,则设置选中状态。完整代码:HTML:
<form>
<table border="1" bordercolor="#5B0001">
<tr><th colspan="2"><center>APR Totals</center></th></tr>
<tr><th>Element</th><th>Total Selected</th></tr>
<tr><td><b>Pre-Algebra Enrolled:</b></td><td><input type="text" name="PreAlgEI" id="PreAlgEI" size="10" readonly="yes"></td></tr>
</table>
</form>
<br />
<table id="studentAtt" class="display" cellspacing="0" style="width:100%;">
<thead>
<tr>
<th>Texas Unique ID</th>
<th>Local ID</th>
<th>Last</th>
<th>First</th>
<th></th>
</tr>
</thead>
<tbody>
</tbody>
</table>
jQuery代码:
$(document).ready(function() {
data = [
['1234', '4321', 'Test1', 'User','1'],
['12345', '54321', 'Test2', 'User','0'],
['123456', '654321', 'Test3','User','1'],
['23456', '65432', 'Test4','User','1'],
['3456', '6543', 'Test5','User','0']
]
/***** Pre-Algebra Arrays ***/
var removeChecksPreAE = [];
var saveChecksPreAE = [];
var saveChecksPreAEOG = []; // Used to store the original loaded IDs from database on form load.
var preAECount = 0;
// Setup Data Table
var t = $('#studentAtt').DataTable(
{
"data":data,
/*'columns': [
{
render: function ( data, type, row ) {
var checkbox = $('<input/>',{
'type': 'checkbox',
'class':'editor-completed'
});
return data;
},
className: "dt-body-center"
}],*/
rowCallback: function ( row, data ) {
if (data[4] == 1){
$('td:nth-child(5) input', row).attr('checked','checked');
saveChecksPreAEOG.push(data[0]);
preAECount += 1;
}
},
'columnDefs': [
{
'targets': 4,
'checkboxes': {
'selectRow': false
}
}
],
'select': {
'style': 'multi'
},
'order': []
});
// Set total selected value on form load
document.getElementById('PreAlgEI').value = preAECount;
/******** Pre-Algebra Enrolled, select all checkbox on first row, header **************/
$('th:nth-child(5) input').on('click', function(){
preAECount = 0;
if ($(this).is(':checked')){
$('td:nth-child(5) input').attr('checked','checked');
// Store all checkboxes checked into array
$('tr td:nth-child(5) input').each(function() {
preAECount += 1;
var currentRowPreEA=$(this).closest('tr');
var col0PreEA=currentRowPreEA.find('td:eq(0)').html();
$('td:nth-child(5) input',currentRowPreEA).attr('checked','checked');
saveChecksPreAE.push(col0PreEA);
});
}
else
{
saveChecksPreAE = [];
$('td:nth-child(5) input').attr('checked',false);
$('tr td:nth-child(5) input').each(function(){
var rowPAE = $(this).closest('tr');
var preAlgETXID = rowPAE.find('td:eq(0)').html();
$.each(saveChecksPreAEOG, function (indexPreAE, valuePreAE){
if(valuePreAE == preAlgETXID){
preAECount -= 1;
$('td:nth-child(5) input', rowPAE).attr('checked','checked');
}
});
});
}
preAECount = Math.abs(preAECount);
document.getElementById('PreAlgEI').value = preAECount;
});
/***. Handle individual checkboxes checked/un-checked, column 5 *****/
$('td:nth-child(5) input').on('click', function(){
if($(this).is(':checked')){
preAECount += 1;
}
else{
preAECount -= 1;
}
preAECount = Math.abs(preAECount);
document.getElementById('PreAlgEI').value = preAECount;
});
});
JSFiddle:https ://jsfiddle.net/Daniel_S_EGT/y84tdac0/66/
我的想法是我需要使用不同的语法来使用 Gyrocode 复选框扩展来设置选中状态。任何指导将不胜感激。
谢谢,丹尼尔
解决方案
推荐阅读
- javascript - 承诺将未定义的结果返回给回调
- python - 如何解决 python selenium 2captcha 问题?
- python - 输入函数并返回数据集中的单词数
- react-native - React 导航抽屉 v5x
- sql - 递归?如何按常见项目对订单进行分组
- ldap - 用于查看器配置文件过滤器的气流 ldap 组设置
- python - 更改 PyQt5 的调色板
- python - 无法调用函数以使退出框出现在pygame中
- javascript - 如何让 Google 使用 history.pushState 索引我的页面?
- xml - 如何使用 VB.net 代码从 XML 文件创建 XSD 文件