DataTables : 정의되지 않은 속성 스타일을 읽을 수 없습니다.


118

다음과 같은 오류가 발생합니다.

jquery.dataTables.js:4089 Uncaught TypeError: Cannot read property 'style' of undefined(…)
_fnCalculateColumnWidths @ jquery.dataTables.js:4089
_fnInitialise @ jquery.dataTables.js:3216
(anonymous function) @ jquery.dataTables.js:6457
each @ jquery-2.0.2.min.js:4
each @ jquery-2.0.2.min.js:4
DataTable @ jquery.dataTables.js:5993
$.fn.DataTable @ jquery.dataTables.js:14595
(anonymous function) @ VM3329:1
(anonymous function) @ VM3156:180
l @ jquery-2.0.2.min.js:4
fireWith @ jquery-2.0.2.min.js:4
k @ jquery-2.0.2.min.js:6
(anonymous function) @ jquery-2.0.2.min.js:6

(익명 함수) @ VM3156 : 180을 참조하는 위의 줄은 다음과 같습니다.

                TASKLISTGRID = $("#TASK_LIST_GRID").DataTable({
                    data : response,
                    columns : columns.AdoptionTaskInfo.columns,
                    paging: true
                });

그래서 나는 이것이 실패한 곳이라고 생각합니다.

HTML ID 요소가 있습니다.

  <table id="TASK_LIST_GRID" class="table table-striped table-bordered table-hover dataTable no-footer" width="100%" role="grid" aria-describedby="TASK_LIST_GRID_info">
  <thead>
    <tr role="row">
      <th class="sorting" tabindex="0" aria-controls="TASK_LIST_GRID" rowspan="1" colspan="1">Solution</th>
      <th class="sorting" tabindex="0" aria-controls="TASK_LIST_GRID" rowspan="1" colspan="1">Status</th>
      <th class="sorting" tabindex="0" aria-controls="TASK_LIST_GRID" rowspan="1" colspan="1">Category</th>
      <th class="sorting" tabindex="0" aria-controls="TASK_LIST_GRID" rowspan="1" colspan="1">Type</th>
      <th class="sorting" tabindex="0" aria-controls="TASK_LIST_GRID" rowspan="1" colspan="1">Due Date</th>
      <th class="sorting" tabindex="0" aria-controls="TASK_LIST_GRID" rowspan="1" colspan="1">Create Date</th>
      <th class="sorting" tabindex="0" aria-controls="TASK_LIST_GRID" rowspan="1" colspan="1">Owner</th>
      <th class="sorting" tabindex="0" aria-controls="TASK_LIST_GRID" rowspan="1" colspan="1">Comments</th>
      <th class="sorting" tabindex="0" aria-controls="TASK_LIST_GRID" rowspan="1" colspan="1">Mnemonic</th>
      <th class="sorting" tabindex="0" aria-controls="TASK_LIST_GRID" rowspan="1" colspan="1">Domain</th>
      <th class="sorting" tabindex="0" aria-controls="TASK_LIST_GRID" rowspan="1" colspan="1">Approve</th>
      <th class="sorting" tabindex="0" aria-controls="TASK_LIST_GRID" rowspan="1" colspan="1">Dismiss</th>
    </tr>
  </thead>
  <tbody></tbody>
</table>

또한 columns.AdoptionTaskInfo.columns 및 응답 개체 배열이 있습니다. 문제를 디버깅하는 방법을 모르겠습니다. 어떤 제안이라도 도움이 될 것입니다 ..


2
.style코드에서 찾으 십시오. 정의되지 않은 변수의 속성에 액세스하려고합니다. 거기에서 디버깅 할 수 있습니다.
Jecoms

80
가져 오려는 열의 수가 생성 한 <th>의 수와 동일한 지 확인합니다.
matrixguy 16.07.07

12
이 문제를 일으키는 자바 스크립트에 정의 된 열 수와 일치하지 않는 열 수입니다.
Dhanuka777 2011

답변:


284

문제는 <th> 태그의 수가 구성 ( "columns"키가있는 배열)의 열 수와 일치해야한다는 것입니다. 지정된 열보다 <th> 태그가 적 으면 약간 암호화 된 오류 메시지가 표시됩니다.

(정답은 이미 댓글로 표시되어 있지만 답으로 반복하고 있으므로 찾기가 더 쉽기 때문에 댓글이 보이지 않습니다)


2
다른 요점을 추가하고 싶습니다. 사람들이 어떤 경우에 도움이 될 수 있습니다. dataSrc를 정의하지 않으면 json에서 "data"를 사용하고 다른 이름을 사용하면이 오류가 발생합니다.
Ahmed Sunny

또한 표시되지 않지만 검색 또는 편집기와 같은 항목에 포함 된 열이있는 경우 해당 열은 열 : [] 목록의 끝에 있어야합니다.
Tim Dearborn

감사합니다. 자바 스크립트 문제가 궁금해서 ..
지밀 촉시

24

가능한 원인들

  • th테이블 머리글 또는 바닥 글 의 요소 수가 테이블 본문의 열 수와 다르거 나 columns옵션을 사용하여 정의되었습니다 .
  • colspan 속성 th은 테이블 헤더의 요소에 사용됩니다 .
  • columnDefs.targets옵션에 잘못된 열 인덱스가 지정되었습니다 .

솔루션

  • th테이블 머리글 또는 바닥 글 의 요소 수가 columns옵션에 정의 된 열 수와 일치 하는지 확인하십시오 .
  • colspan테이블 헤더에 속성 을 사용하는 경우 th각 열에 대해 적어도 두 개의 헤더 행과 하나의 고유 한 요소 가 있는지 확인하십시오 . 자세한 내용은 복잡한 헤더 를 참조하십시오.
  • columnDefs.targets옵션 을 사용하는 경우 0부터 시작하는 컬럼 인덱스가 기존 컬럼을 참조하는지 확인하십시오.

연결

자세한 내용은 jQuery DataTables : 일반적인 JavaScript 콘솔 오류-TypeError : Cannot read property 'style'of undefined 를 참조하십시오.


13

어떤 제안이 도움이 될 것이라고 말 했으므로 현재 내 DataTables "정의되지 않은 속성 '스타일'을 읽을 수 없음"문제를 해결했지만 내 문제는 기본적으로 데이터 테이블 시작 단계 columnDefs섹션 에서 잘못된 인덱스를 사용하는 것 입니다. 9 개의 열이 있고 인덱스는 0, 1, 2, .., 8이지만 9와 10에 인덱스를 사용하고 있었으므로 잘못된 인덱스 문제를 수정 한 후 오류가 사라졌습니다. 이게 도움이 되길 바란다.

요컨대, 모든 곳에서 일관된 경우 열의 양과 인덱스를 관찰해야합니다.

버기 코드 :

    jQuery('#table').DataTable({
        "ajax": {
            url: "something_url",
            type: 'POST'
        },
        "processing": true,
        "serverSide": true,
        "bPaginate": true,
        "sPaginationType": "full_numbers",
        "columns": [
            { "data": "cl1" },
            { "data": "cl2" },
            { "data": "cl3" },
            { "data": "cl4" },
            { "data": "cl5" },
            { "data": "cl6" },
            { "data": "cl7" },
            { "data": "cl8" },
            { "data": "cl9" }
        ],
        columnDefs: [
            { orderable: false, targets: [ 7, 9, 10 ] } //This part was wrong
        ]
    });

고정 코드 :

    jQuery('#table').DataTable({
        "ajax": {
            url: "something_url",
            type: 'POST'
        },
        "processing": true,
        "serverSide": true,
        "bPaginate": true,
        "sPaginationType": "full_numbers",
        "columns": [
            { "data": "cl1" },
            { "data": "cl2" },
            { "data": "cl3" },
            { "data": "cl4" },
            { "data": "cl5" },
            { "data": "cl6" },
            { "data": "cl7" },
            { "data": "cl8" },
            { "data": "cl9" }
        ],
        columnDefs: [
            { orderable: false, targets: [ 5, 7, 8 ] } //This part is ok now
        ]
    });

이것은 나를 구했습니다. 감사합니다. 나는 "aTargets"를 사용한다 : [7], 그래서 그것의 오류로 이동한다. 왜냐하면
이다

1
위대한 내 대답은 당신의 문제를 해결하는 것이 행복하다, + 투표하시기 바랍니다
Bahadir Tasdemir

10

colspan테이블 헤더를 설정할 때이 문제가 발생했습니다 . 그래서 내 테이블은 다음과 같습니다.

        <thead>
            <tr>
                <th colspan="2">Expenses</th>

                <th colspan="2">Income</th>

                <th>Profit/Loss</th>
            </tr>
        </thead>

그런 다음 변경하면 다음과 같습니다.

        <thead>
            <tr>
                <th>Expenses</th>
                <th></th>
                <th>Income</th>
                <th></th>
                <th>Profit/Loss</th>
            </tr>
        </thead>

모든 것이 잘 작동했습니다.



3

새 (기타) 테이블을 그릴 때도 발생할 수 있습니다. 먼저 이전 테이블을 제거하여이 문제를 해결했습니다.

$("#prod_tabel_ph").remove();


2

해결책은 매우 간단합니다.

  <table id="TASK_LIST_GRID" class="table table-striped table-bordered table-hover dataTable no-footer" width="100%" role="grid" aria-describedby="TASK_LIST_GRID_info">
  <thead>
    <tr role="row">
      <th class="sorting" tabindex="0" aria-controls="TASK_LIST_GRID" rowspan="1" colspan="1">Solution</th>
      <th class="sorting" tabindex="0" aria-controls="TASK_LIST_GRID" rowspan="1" colspan="1">Status</th>
      <th class="sorting" tabindex="0" aria-controls="TASK_LIST_GRID" rowspan="1" colspan="1">Category</th>
      <th class="sorting" tabindex="0" aria-controls="TASK_LIST_GRID" rowspan="1" colspan="1">Type</th>
      <th class="sorting" tabindex="0" aria-controls="TASK_LIST_GRID" rowspan="1" colspan="1">Due Date</th>
      <th class="sorting" tabindex="0" aria-controls="TASK_LIST_GRID" rowspan="1" colspan="1">Create Date</th>
      <th class="sorting" tabindex="0" aria-controls="TASK_LIST_GRID" rowspan="1" colspan="1">Owner</th>
      <th class="sorting" tabindex="0" aria-controls="TASK_LIST_GRID" rowspan="1" colspan="1">Comments</th>
      <th class="sorting" tabindex="0" aria-controls="TASK_LIST_GRID" rowspan="1" colspan="1">Mnemonic</th>
      <th class="sorting" tabindex="0" aria-controls="TASK_LIST_GRID" rowspan="1" colspan="1">Domain</th>
      <th class="sorting" tabindex="0" aria-controls="TASK_LIST_GRID" rowspan="1" colspan="1">Approve</th>
      <th class="sorting" tabindex="0" aria-controls="TASK_LIST_GRID" rowspan="1" colspan="1">Dismiss</th>
    </tr>
  </thead>
  <tbody></tbody>
</table>

                TASKLISTGRID = $("#TASK_LIST_GRID").DataTable({
                    data : response,
                    columns : columns.AdoptionTaskInfo.columns,
                    paging: true
                });
                
                //Note: columns : columns.AdoptionTaskInfo.columns has at least a column not definded in the <thead>

참고 : columns : columns.AdoptionTaskInfo.columns에는 테이블 헤드에 정의되지 않은 열이 하나 이상 있습니다.


1

재미있게도 한 쌍의 쌍이 너무 많아서 다음과 같은 오류가 발생했지만 여전히 Google이 나를 여기로 지시했습니다. 사람들이 찾을 수 있도록 적어 두겠습니다.

jquery.dataTables.min.js:27 Uncaught TypeError: Cannot read property 'className' of undefined
at ua (jquery.dataTables.min.js:27)
at HTMLTableElement.<anonymous> (jquery.dataTables.min.js:127)
at Function.each (jquery.min.js:2)
at n.fn.init.each (jquery.min.js:2)
at n.fn.init.j (jquery.dataTables.min.js:116)
at HTMLDocument.<anonymous> (history:619)
at i (jquery.min.js:2)
at Object.fireWith [as resolveWith] (jquery.min.js:2)
at Function.ready (jquery.min.js:2)
at HTMLDocument.K (jquery.min.js:2)

0

제 경우에는 서버 측 데이터 테이블을 두 번 업데이트했는데이 오류가 발생합니다. 누군가에게 도움이되기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.