数据表(行详细信息):未捕获的类型错误:无法读取未定义的属性“样式”

Posted

技术标签:

【中文标题】数据表(行详细信息):未捕获的类型错误:无法读取未定义的属性“样式”【英文标题】:Datatables (Row Details): Uncaught TypeError: Cannot read property 'style' of undefined 【发布时间】:2018-07-14 07:20:25 【问题描述】:

我正在尝试实现数据表行详细信息

这是我的表,ID 为“user_datas”

<table id="user_datas" class="table table-bordered table-striped" >
     <thead>
       <tr>
         <th>NAME</th>
         <th>SEX</th>
         <th>BIRTHDATE</th>
         <th>AGE</th>
       </tr>
     </thead>
  </table>

这是来自我试图实现的数据表文档的代码

function format ( d ) 
    return 'Name: '+d.name+'<br>'+
   'Gender: '+d.sex+'<br>'+
        'The child row can contain any data you wish, including links, images, inner tables etc.';


$(document).ready(function() 
    var dataTable = $('#user_datas').DataTable(
      "processing":true,
      "serverSide":true,
      "order":[],
      "ajax":
        url:"../controller/fetch_senior_citizen.php",
        type:"POST"
      ,

      "columns": [
          
            "class":          "details-control",
            "orderable":      false,
            "data":           null,
            "defaultContent": ""
          ,
           "data": "name" ,
           "data": "sex" ,
           "data": "birthdate" ,
           "data": "age" 
      ],
        "order": [[1, 'asc']]
    );

     // Array to track the ids of the details displayed rows
    var detailRows = [];

    $('#user_datas tbody').on( 'click', 'tr td.details-control', function () 
        var tr = $(this).closest('tr');
        var row = dataTable.row( tr );
        var idx = $.inArray( tr.attr('id'), detailRows );

        if ( row.child.isShown() ) 
            tr.removeClass( 'details' );
            row.child.hide();

            // Remove from the 'open' array
            detailRows.splice( idx, 1 );
        
        else 
            tr.addClass( 'details' );
            row.child( format( row.data() ) ).show();

            // Add to the 'open' array
            if ( idx === -1 ) 
                detailRows.push( tr.attr('id') );
            
        
     );

    // On each draw, loop over the `detailRows` array and show any child rows
    dataTable.on( 'draw', function () 
        $.each( detailRows, function ( i, id ) 
            $('#'+id+' td.details-control').trigger( 'click' );
         );
     );                    
);

这是我的一些来自 fetch_senior_citizen.php 的代码

foreach($result as $row)

    $name = clean($row["f_name"])." ".clean($row["m_name"])." ".clean($row["l_name"]);
    $sub_array = array();
    $sub_array["id"] = $row['id'];
    $sub_array["name"] = $name;
    $sub_array["sex"] = strtoupper($row["sex"]);
    $sub_array["birthdate"] = $row["birthdate"];
    $sub_array["age"] = $row["age"];
    $data[] = $sub_array;


$output = array(
    "draw"              =>  intval($_POST["draw"]),
    "recordsTotal"      =>  $filtered_rowsz,
    "recordsFiltered"   =>  get_total_all_records4(),
    "data"              =>  $data
);
echo json_encode($output, JSON_PRETTY_PRINT);

我当前面临的错误是 Uncaught TypeError: Cannot read property 'style' of undefined 但如果我删除此代码


    "class": "details-control",
    "orderable": false,
    "data": null,
    "defaultContent": ""

一切正常。但我的表没有行详细信息

【问题讨论】:

【参考方案1】:

问题解决了!我只是忘了在广告上放一个空的 th

【讨论】:

谢谢哥们。我花了几个小时来找出这个愚蠢的错误。 花这么多时间来解决这样一个小问题,结果发现我错过了一个,这让我感到非常难过。谢谢!

以上是关于数据表(行详细信息):未捕获的类型错误:无法读取未定义的属性“样式”的主要内容,如果未能解决你的问题,请参考以下文章

数据表插件错误未捕获的类型错误:无法读取未定义的属性“mData”

datatables jquery - 未捕获的类型错误:无法读取未定义的属性“显示”

未捕获的类型错误:无法读取未定义的属性(读取“使用”)

Sencha-Touch:未捕获的类型错误:无法读取未定义的属性“代理”

未捕获的类型错误:无法读取 null 的属性“长度”(maps.js 第 85 和 541 行)

数据表:未捕获的类型错误:无法读取未定义的属性“长度”