DataTables: Nie można odczytać stylu właściwości o wartości undefined


118

Otrzymuję ten błąd z następującymi informacjami:

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

Linia powyżej odnosząca się do (funkcja anonimowa) @ VM3156: 180 to:

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

Więc zgaduję, że w tym miejscu zawodzi.

Istnieje element 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>

Istnieją również kolumnys.AdoptionTaskInfo.columns i tablice obiektów odpowiedzi. Nie wiem, jak usunąć błędy. Wszelkie sugestie będą pomocne.


2
Szukaj .stylew swoim kodzie. Próbujesz uzyskać dostęp do tej właściwości niezdefiniowanej zmiennej. Możesz stamtąd debugować.
— Jecoms,

80
Sprawdź, czy liczba kolumn, które próbujesz pobrać, jest taka sama, jak liczba utworzonych przez Ciebie <th>.
— matrixguy

12
Niedopasowanie liczby kolumn do liczby kolumn zdefiniowanych w skryptach JavaScript powodujących ten problem.
— Dhanuka777

Odpowiedzi:


284

Problem w tym, że liczba tagów <th> musi odpowiadać liczbie kolumn w konfiguracji (tablica z kluczem „kolumny”). Jeśli jest mniej tagów <th> niż określonych kolumn, pojawia się ten nieco tajemniczy komunikat o błędzie.

(poprawna odpowiedź jest już obecna jako komentarz, ale powtarzam ją jako odpowiedź, więc łatwiej ją znaleźć - nie widziałem komentarzy)


2
Chcę dodać kolejny punkt, być może ludzie uznają to za pomocne w jakimś przypadku, jeśli nie zdefiniujesz dataSrc, to w swoim json użyj "data", jeśli użyjesz innej nazwy, pojawi się ten błąd.
— Ahmed Sunny

Ponadto, jeśli masz kolumny, które nie są widoczne, ale uwzględnione w takich sytuacjach, jak wyszukiwanie lub Edytor, muszą one znajdować się na końcu listy kolumn: [] lista.
— Tim Dearborn


24

MOŻLIWE PRZYCZYNY

  • Liczba thelementów w nagłówku lub stopce tabeli różni się od liczby kolumn w treści tabeli lub zdefiniowanej za pomocą columnsopcji.
  • Atrybut colspan jest używany dla thelementu w nagłówku tabeli.
  • Nieprawidłowy indeks kolumny określony w columnDefs.targetsopcji.

ROZWIĄZANIA

  • Upewnij się, że liczba thelementów w nagłówku lub stopce tabeli odpowiada liczbie kolumn zdefiniowanych w columnsopcji.
  • Jeśli używasz colspanatrybutu w nagłówku tabeli, upewnij się, że masz co najmniej dwa wiersze nagłówka i jeden unikalny thelement dla każdej kolumny. Aby uzyskać więcej informacji, zobacz nagłówek Complex .
  • Jeśli używasz columnDefs.targetsopcji, upewnij się, że indeks kolumn liczony od zera odwołuje się do istniejących kolumn.

SPINKI DO MANKIETÓW

Aby uzyskać więcej informacji, zobacz jQuery DataTables: Typowe błędy konsoli JavaScript - TypeError: Cannot read property „style” of undefined, aby uzyskać więcej informacji.


13

Powiedziałeś, że wszelkie sugestie będą pomocne, więc obecnie rozwiązałem mój problem z danymi „nie można odczytać stylu” właściwości o niezdefiniowanym ”, ale mój problem polegał w zasadzie na użyciu niewłaściwych indeksów w columnDefssekcji fazy inicjowania tabeli danych . Mam 9 kolumn i indeksy to 0, 1, 2, .., 8 ale używałem indeksów dla 9 i 10 więc po naprawieniu błędnego indeksu usterka zniknęła. Mam nadzieję, że to pomoże.

Krótko mówiąc, musisz obserwować liczbę kolumn i indeksy, jeśli wszędzie są spójne.

Kod błędu:

    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
        ]
    });

Naprawiono kod:

    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
        ]
    });

To mnie uratowało, dzięki. Używam "aTargets": [7], więc przechodzi do błędu, ponieważ nie ma kolumny z indeksem 7. legacy.datatables.net/usage/columns
— fudu

1
Świetnie, cieszę się, że moja odpowiedź rozwiązała Twój problem, + głosów proszę
— Bahadir Tasdemir

10

Miałem ten problem, kiedy ustawiłem colspanw nagłówku tabeli. Więc mój stół był:

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

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

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

Potem raz zmieniam to na:

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

Wszystko działało dobrze.


4

Upewnij się, że w danych wejściowych response[i]i response[i][j]nie ma undefined/ null.

Jeśli tak, zamień je na „”.


3

Może się to również zdarzyć podczas rysowania nowej (innej) tabeli. Rozwiązałem to, usuwając najpierw poprzednią tabelę:

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


2

Rozwiązanie jest dość proste.

  <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>

Uwaga : column: columns.AdoptionTaskInfo.columns ma co najmniej jedną kolumnę niezdefiniowaną w nagłówku tabeli


1

Co zabawne, otrzymałem następujący błąd, ponieważ o jedną / tę parę za dużo i nadal Google skieruje mnie tutaj. Zostawię to zapisane, aby ludzie mogli to znaleźć.

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

W moim przypadku dwukrotnie aktualizowałem datatable po stronie serwera i daje mi ten błąd. Mam nadzieję, że to komuś pomoże.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.