webentwicklung-frage-antwort-db.com.de

Nicht abgerufener TypeError: Kann die Eigenschaft 'className' von undefined nicht lesen

In den Entwicklertools von Google Chrome wird folgender Fehler ausgegeben:

Nicht abgerufener TypeError: Kann die Eigenschaft 'className' von undefined nicht lesen 

Der Code, in dem der Fehler ausgelöst wird, lautet: 

var oTable = $('#resultstable').dataTable({
                            "bAutoWidth" : true,
                            "iDisplayLength" : 10,
                            "bFilter" : false,
                            "bLengthChange" : false
                        });

resultstable ist die id einer tabelle im html:

<table cellpadding="0" cellspacing="0" border="0" id="resultstable"
                    name="resultstable" class="display datatable">

Das Seltsame ist, dass es nach dem table-Tag eine if-Anweisung gibt. Die Tabelle läuft einwandfrei und das CSS wird korrekt angezeigt, wenn das Programm in den else if{}-Abschnitt gesendet wird. Der obige Fehler wird jedoch ausgegeben, und es wird kein CSS angewendet, wenn es im if{}-Abschnitt ist.

Hilfe bitte! 

25
ph_leh

Die andere Antwort brachte mich auf den richtigen Weg.

Der Fehler war, dass die von mir erstellte Tabelle falsch war.

Meine Kopfzeilenspalten (natürlich innerhalb eines Abschnitts) stimmten nicht mit meinen Zeilenspalten (im Kopfbereich)

In meiner Situation hatte ich zu viele Spalten in der Kopfzeile.

50
Nathan Koop

Eine andere mögliche Ursache ist, wenn Sie im Attribut "aoColumnDefs" mehr Spalten auflisten, als in der Tabelle "td" -Elemente vorhanden sind.

var yourTable = $('#product-search-results-table').dataTable({
    // If you only have three columns in the HTML table, then this line will cause an error, because it lists four columns in "aoColumnDefs".
    "aoColumnDefs": [{ "bSortable": false, "aTargets": [0, 1, 2, 3] }]
});
11
Toby Artisan

Datatables erfordert, dass Ihre HTML-Tabelle perfekt ist. Ich habe festgestellt, dass ich diese Fehlermeldung erhalten habe, wenn <th> und <td> nicht gleich viel waren. Stellen Sie sicher, dass Sie keinen zusätzlichen Header haben.

10
Justin

Ich habe einen identischen Fehler zu dem, den Sie jetzt erhalten. Ich habe einmal einen sehr ähnlichen Fehler bei der Verwendung der Chosen-Bibliothek festgestellt. Das Problem war (in Chosens Fall), dass IDs mit den []-Zeichen verwendet wurden, wodurch Javascript zwischen css-Selektoren und -IDs verwirrt wurde (denken Sie daran, dass wir in CSS [] verwenden können, um Attribute anzugeben).

Bei DataTables ist mir jedoch aufgefallen, dass das DataTables-Skript selbst class = " " vor dem ersten Element in jedem tr-Element in der tbody vorangestellt wurde. 

Der Grund dafür war, dass die HTML-Ausgabe von PHP einen logischen Fehler hatte. Der fehlerhafte Code:

<?php
for ($currentRow = 0 ; $currentRow <= $query_length; $currentRow++) {
        ?>
        <tr>
        <?php
        list($job_id, $company_id, $job_title, $industry_id, $profession_int, $job_openings, $job_city, $job_salary_start, $job_end_date, $job_start_date, $job_skills, $company_name, $isConfidential, $job_experience_level) = dbRow($query_results, $currentRow);
      echo "<td class = \"detailed-job-row\">" . $job_title . "</td>";
      echo "<td class = \"detailed-job-row\">" . $company_name . "</td>";
      echo "<td class = \"detailed-job-row\">" . $industry_id . "</td>";
      echo "<td class = \"detailed-job-row\">" . $profession_int . "</td>";
      echo "<td class = \"detailed-job-row\">" . $job_openings . "</td>";
      echo "<td class = \"detailed-job-row\">" . $job_city . "</td>";
      echo "<td class = \"detailed-job-row\">" . $job_salary_start . "</td>";
      echo "<td class = \"detailed-job-row\">" . $job_end_date . "</td>";
      echo "<td class = \"detailed-job-row\">" . $job_start_date . "</td>";
      echo "<td class = \"detailed-job-row\">" . $job_skills . "</td>";
      echo "<td class = \"detailed-job-row\">" . $job_experience_level . "</td>";
      ?>
        </tr>
        <?php  
     } ?>
    </tbody>
  </table>
<?php
}
?>

Am unteren Rand der langen, langen Tabelle ist ein Fehler aufgetreten, der darauf hinweist, dass Postgres nicht in Zeile 208 springen konnten. Dies sagte mir, dass ich bei i - 1 oder $currentRow - 1 aufhören muss zu schleifen.

Daher der feste Arbeitscode:

<?php
for ($currentRow = 0 ; $currentRow <= $query_length - 1; $currentRow++) {
        ?>
        <tr>
        <?php
        list($job_id, $company_id, $job_title, $industry_id, $profession_int, $job_openings, $job_city, $job_salary_start, $job_end_date, $job_start_date, $job_skills, $company_name, $isConfidential, $job_experience_level) = dbRow($query_results, $currentRow);
      echo "<td class = \"detailed-job-row\">" . $job_title . "</td>";
      echo "<td class = \"detailed-job-row\">" . $company_name . "</td>";
      echo "<td class = \"detailed-job-row\">" . $industry_id . "</td>";
      echo "<td class = \"detailed-job-row\">" . $profession_int . "</td>";
      echo "<td class = \"detailed-job-row\">" . $job_openings . "</td>";
      echo "<td class = \"detailed-job-row\">" . $job_city . "</td>";
      echo "<td class = \"detailed-job-row\">" . $job_salary_start . "</td>";
      echo "<td class = \"detailed-job-row\">" . $job_end_date . "</td>";
      echo "<td class = \"detailed-job-row\">" . $job_start_date . "</td>";
      echo "<td class = \"detailed-job-row\">" . $job_skills . "</td>";
      echo "<td class = \"detailed-job-row\">" . $job_experience_level . "</td>";
      ?>
        </tr>
        <?php  
     } ?>
    </tbody>
  </table>
<?php
}
?>

Durch diese Änderung konnten DataTables ordnungsgemäß ausgeführt werden.

Obwohl ich keine funktionierende Lösung anbieten kann, empfehle ich Ihnen, Ihre HTML-Markierung zu betrachten, da dies möglicherweise die Ursache Ihres Problems ist (zB hat Ihre Tabelle eine tbody?).

2
user1429980

In meinem speziellen Fall hatte ich die aTargets-Eigenschaften mit Array-Indizes außerhalb der Grenzen für meine Elemente festgelegt.

$('.datatable').dataTable({
  aoColumnDefs: [
    {
      bSortable: false,
      aTargets: [0, 6]
    }
  ],
  aaSorting: []
});

Bei diesem Satz gab es 7 td-Spalten, aber es waren nur 6.

$('.datatable').dataTable({
  aoColumnDefs: [
    {
      bSortable: false,
      aTargets: [0, 5]
    }
  ],
  aaSorting: []
});
1
jth_92

Es wird dieser Fehler ausgegeben, weil beim ersten Laden von dom Sie zuvor deklariert wurden.

für diesen Fehler hatte ich eine Lösung geschrieben:

sie können hinzufügen, wenn Bedingung nicht wie unten definiert ist

if(document.getElementsByTagName('button') !== undefined){
  // and write your needed code here
}
0

Ähnliches Problem festgestellt. Der Hauptfall war, dass, während dataTable gerade die Kontrolle über die Tabelle übernahm, unser Code gleichzeitig versuchte, die Eigenschaften der Tabelle zu ändern. Die Fehlermeldung besagt jedoch nicht, dass das Problem behoben wurde, sobald die Tabelle nur noch von dataTable verwaltet wurde.

0
Gil Shapir