25

Google Chrome 的开发者工具中出现以下错误:

未捕获的类型错误:无法读取未定义的属性“类名”

引发错误的代码是:

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

resultstable 是 html 中表的 id:

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

奇怪的是,在 table 标记之后有一个 if 语句。该表运行得非常好,并且当程序被发送到 elseif{}部分时,CSS 正确显示,但它抛出了上述错误,并且当它在该if{}部分中时没有应用 CSS。

请帮忙!

4

7 回答 7

51

另一个答案让我走上了正轨。

更简洁地说,错误是我创建的表不正确。

我的标题列(当然是在头内)与我的行列(在 tbody 内)不匹配

在我的情况下,标题内的列太多。

于 2012-08-20T20:24:26.093 回答
11

另一个可能的原因是,如果您在“aoColumnDefs”属性中列出的列多于表中的“td”元素。

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] }]
});
于 2013-06-03T17:34:58.957 回答
10

Datatables 要求您的 html 表是完美的。我发现当我没有等量的<th>and时我得到了这个错误<td>。确保您没有额外的标题。

于 2012-12-28T17:01:04.423 回答
2

在我的特定情况下,我将 aTargets 属性设置为我的元素边界之外的数组索引。

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

这设置有 7 个 td 列,但只有 6 个。将其更改为以下更正:

$('.datatable').dataTable({
  aoColumnDefs: [
    {
      bSortable: false,
      aTargets: [0, 5]
    }
  ],
  aaSorting: []
});
于 2013-10-09T14:20:03.140 回答
2

我遇到了与您现在遇到的相同的错误。我曾经在使用 Chosen 库时遇到过类似的错误。问题是(在选择的情况下)使用了带有[]字符的 ID,从而混淆了 css 选择器和 id 之间的 Javascript(请记住,在 CSS 中我们可以[]用来指定属性)。

然而,在 DataTables 的情况下,我注意到 DataTables 脚本本身class = " "tbody.

这是因为 php 的 HTML 输出存在逻辑错误。故障代码:

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

long, long 表的底部有一个错误,表明 postgres 无法跳转到第 208 行。这告诉我我需要在i - 1, 或处停止循环$currentRow - 1

因此,固定的工作代码:

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

执行此更改允许 DataTables 正确执行。

因此,尽管我无法提供可行的解决方案,但我建议您查看您的 html 标记,因为这可能是您的问题的根源(例如,您的表格是否有tbody?)。

于 2012-07-31T18:06:05.833 回答
0

遇到了类似的问题。根本情况是,当 dataTable 即将控制表时,我们的代码也试图同时操作表的属性。错误消息并没有这么说,但是,一旦表由 dataTable 单独管理,问题就消失了。

于 2017-11-17T23:53:57.903 回答
0

它抛出这个错误是因为当 dom 第一次加载你在声明之前使用的。

对于这个错误,我有一个解决方案写在下面:

如果条件特定元素不是未定义的,您可以添加,如下所示

if(document.getElementsByTagName('button') !== undefined){
  // and write your needed code here
}
于 2017-09-21T07:55:33.257 回答