我正在使用在此处找到的向下钻取数据表。
数据表存在于手风琴内。用户将通过单击选择类别,它会展开以显示与该类别相关的数据表。当用户单击类别时调用函数 initTable。
DataTables 文档说要使用此代码来说明页面上的多个数据表,但我无法让它工作。
$(document).ready(function() {
$('.dataTable').dataTable();
} );
我所做的不是使用“#example”,而是将其替换为“#”+类别,这 99% 有效。我可以单击一个类别,向下钻取以查看一行上的其他数据,切换到一个新类别,做同样的事情。
不起作用的是 - 如果我单击一个类别,然后关闭该类别或转到另一个然后返回第一个类别 - 展开一行然后抛出错误“aoData”为空或不是对象。以下 3 张图片显示了我在说什么。注意在第 3 个图像详细信息行中不显示。
我无法插入图像,但我已将它们张贴在这里以显示我在说什么。
这是为创建表而调用的 initTable 函数。在创建新表之前,我正在使用 bDestroy 销毁现有表。
任何帮助将不胜感激!
function initTable(category, facility)
{
if (gsCategory == "")
gsCategory = category;
else if (gsCategory == category)
gbToggle = !gbToggle;
else
gbToggle = false;
gsCategory = category;
if (gbToggle == false)
{
gsCategory = category;
var select = document.forms[0].selFacility;
var facility = select.options[select.selectedIndex].value;
document.body.style.cursor = 'wait';
var patJson = getJson(facility, category);
var anOpen = [];
var sImageUrl = "../images/";
makeTable(category);
document.body.style.cursor = 'default';
var oTable = $('#'+category).dataTable( {
"bProcessing": false,
"bDestroy": true,
"aaData": patJson,
"bAutoWidth": false,
"aoColumns": [
{
"mDataProp": null,
"sClass": "control center",
"sDefaultContent": '<img src="'+sImageUrl+'details_open.png'+'">',
"sWidth": "5%"
},
{ "mDataProp": "S_PAT_NAME", "sWidth": "30%" },
{ "mDataProp": "S_AGE", "sWidth": "15%"},
{ "mDataProp": "S_FIN", "sWidth": "30%"},
{ "mDataProp": "S_ROOM_BED", "sWidth": "20%" }
]
} );
$('#'+category+' td.control').live( 'click', function ()
{
var nTr = this.parentNode;
var i = $.inArray( nTr, anOpen );
if ( i === -1 )
{
$('img', this).attr( 'src', sImageUrl+"details_close.png" );
var nDetailsRow = oTable.fnOpen( nTr, fnFormatDetails(oTable, nTr), 'details' );
$('div.innerDetails', nDetailsRow).slideDown();
anOpen.push( nTr );
}
else
{
$('img', this).attr( 'src', sImageUrl+"details_open.png" );
$('div.innerDetails', $(nTr).next()[0]).slideUp( function ()
{
oTable.fnClose( nTr );
anOpen.splice( i, 1 );
} );
}
} );
}
}
function fnFormatDetails( oTable, nTr )
{
var oData = oTable.fnGetData( nTr );
var sOut =
'<div class="innerDetails">'+
'<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">'+
'<tr><td>Trigger Order:</td><td>'+oData.S_TRIGGER_MED+'</td></tr>'+
'<tr><td>Allergies:</td><td>'+oData.S_ALLERGIES+'</td></tr>'
'</table>'+
'</div>';
return sOut;
}