2

ここにあるドリルダウンDataTableを使用しています。

データテーブルはアコーディオン内に存在します。ユーザーはそれをクリックしてカテゴリを選択し、それが展開されてそのカテゴリに関連するデータテーブルが表示されます。関数initTableは、ユーザーがカテゴリをクリックしたときに呼び出されます。

DataTables docは、このコードを使用してページ上の複数のdataTablesを説明するように言っていますが、それを機能させることができません。

$(document).ready(function() {
    $('.dataTable').dataTable();
} );

私がやったことは、「#example」を使用するのではなく、99%が機能する「#」+カテゴリに置き換えました。カテゴリをクリックし、ドリルダウンして行の追加データを表示し、新しいカテゴリに切り替えて、同じことを行うことができます。

動作しないのはこれです-カテゴリをクリックしてから、そのカテゴリを閉じるか、別のカテゴリに移動してから最初に戻ります-行を展開すると、「aoData」がnullであるか、オブジェクトではないというエラーがスローされます。次の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