2

我正在使用在此处找到的向下钻取数据表。

数据表存在于手风琴内。用户将通过单击选择类别,它会展开以显示与该类别相关的数据表。当用户单击类别时调用函数 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;
}
4

0 回答 0