【问题标题】:TypeError: $(...).DataTable is not a functionTypeError: $(...).DataTable 不是函数
【发布时间】:2015-09-22 12:53:32
【问题描述】:

我正在尝试通过this 链接为我的项目使用 jQuery 的 Datatable JS。

我从同一来源下载了完整的库。包中给出的所有示例似乎都可以正常工作,但是当我尝试将它们合并到我的 WebForms 中时,CSS、JS 根本就工作。

这是我所做的:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <link href="css/jquery.dataTables.css" rel="stylesheet" type="text/css" />
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <table id="myTable" class="display" cellspacing="0" width="100%">
            <thead>
                <tr>
                    <th>Name</th>
                    <th>Position</th>
                    <th>Office</th>
                    <th>Age</th>
                    <th>Start date</th>
                    <th>Salary</th>
                </tr>
            </thead>
            <tfoot>
                <tr>
                    <th>Name</th>
                    <th>Position</th>
                    <th>Office</th>
                    <th>Age</th>
                    <th>Start date</th>
                    <th>Salary</th>
                </tr>
            </tfoot>
            <tbody>
               <!-- table body -->
            </tbody>
        </table>
    </div>
    <script src="js/jquery.dataTables.js" type="text/javascript"></script>
    <script src="js/jquery.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $('#myTable').DataTable();
        });
    </script>
    </form>
</body>
</html>

我的解决方案中 JS 和 CSS 的文件结构如下所示:

我已经添加了所有必要的 JS 和 CSS 参考,如手册中所示。渲染仍然不如预期。没有CSS,连JS都不行。

在控制台中我也收到以下错误:

ReferenceError: jQuery is not defined
TypeError: $(...).DataTable is not a function

我还没有在此处绑定任何动态数据(例如在中继器内),但它仍然无法正常工作。

有人可以指导我解决这个问题的正确方向吗?

【问题讨论】:

  • 无论我写什么代码都很好,但我也遇到了同样的错误。经过长时间的分析,我刚刚重新启动了我的电脑,因为我最近 7 天没有重新启动。然后,我的代码开始工作了。
  • @Ashokkumar:你可能走运了!

标签: javascript jquery css asp.net datatables


【解决方案1】:

我尝试了很多方法,但我的解决方案是在包含数据表的 html 脚本之后添加“延迟”。

<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/1.10.25/js/jquery.dataTables.js" defer></script>

【讨论】:

    【解决方案2】:

    有时会发生脚本(初始化数据表)嵌入在通用页面模板中,因此如果其中一个页面实际上没有任何表并且您没有为数据表导入 jquery 相关文件,您将面临这个问题错误,因为一般初始化仍在寻找那个。 (这是我的情况

    解决方案:是将数据表的初始化包装在一个代码中,在此之前检查库的存在:

    这是一个实际的例子。

    if (typeof jQuery.fn.DataTable != "undefined"){
        $('#accordionExample table').DataTable( {
            "pageLength": 5,
            "info": false,
            "order": [[ 1, "desc" ]]
        } );
    }
    

    【讨论】:

      【解决方案3】:

      在 Laravel 项目中使用 DataTables 时也会发生同样的错误。即使尝试了以下解决方案,错误仍然存​​在:

      1. 确保包含 jQuery
      2. 在包含 DataTables 之前包含 jQuery
      3. 确保只添加一个版本的 jQuery

      为了消除错误,在确保满足上述条件后,在包含 DataTables 的标签中添加“defer”。例如,

      <script src="https://cdn.datatables.net/1.10.23/js/jquery.dataTables.min.js" defer></script>
      

      【讨论】:

      • 这似乎有效。
      【解决方案4】:

      在 Flask 中遇到同样的问题,我已经有一个加载 JQuery、Popper 和 Bootstrap 的模板。我将该模板扩展为其他模板,用作加载包含该表格的页面的基础。

      由于某种原因,在 Flask 中,外部模板中的文件显然是在层次结构中上述表中的文件(您正在扩展的那些)之前加载的,因此 JQuery 在导致问题的 DataTables 文件之前加载。

      我必须创建另一个模板,在同一个地方运行我所有的 JS CDN 导入,这解决了这个问题。

      【讨论】:

        【解决方案5】:

        在我的情况下,解决方案是从浏览器中删除 cookie。

        【讨论】:

          【解决方案6】:

          我也遇到了这个错误。不管出于什么原因我最初编码

          var table = $('#myTable').DataTable({
              "paging": false,
              "order": [[ 4, "asc" ]]
          });
          

          这有时不会引发错误,但有时会。通过将代码更改为

          $('#myTable').DataTable({
              "paging": false,
              "order": [[ 4, "asc" ]]
          });
          

          错误似乎已停止

          【讨论】:

            【解决方案7】:

            原因

            此错误可能有多种原因。

            • 缺少 jQuery DataTables 库。
            • jQuery 库在 jQuery DataTables 之后加载。
            • 已加载多个版本的 jQuery 库。

            解决方案

            仅包含一个版本的 jQuery 库版本 1.7 或更新的之前 jQuery DataTables。

            例如:

            <script src="js/jquery.min.js" type="text/javascript"></script>
            <script src="js/jquery.dataTables.min.js" type="text/javascript"></script>
            

            有关此错误和其他常见控制台错误的更多信息,请参阅 jQuery DataTables: Common JavaScript console errors

            【讨论】:

            • 我的问题是第二个问题:“jQuery 库是在 jQuery DataTables 之后加载的。”最后移动了加载脚本,它工作了。
            • 为什么 DataTables 不能在每个演示的顶部都用粗体大写字母...“您必须在 DATATABLES JS 之前加载 JQUERY JS”。一行文字可以为人类节省大量浪费的时间:)
            • 你也可以在这里找到cdn:cdn.datatables.net
            【解决方案8】:

            老实说,这需要几个小时才能解决。最后,只有一件事再次确认了“Basheer AL-MOMANI”提供的解决方案。这只是声明

               @RenderSection("scripts", required: false)
            

            在所有&lt;script&gt;&lt;/script&gt; 元素之后的_Layout.cshtml 文件中,并且还在同一文件中注释jquery 脚本。其次,我必须添加

             $.noConflict();
            

            在另一个 *.cshtml 文件中的 jquery 函数调用中:

             $(document).readyfunction () {
                      $.noConflict();
                      $("#example1").DataTable();
                     $('#example2').DataTable({
                          "paging": true,
                          "lengthChange": false,
                          "searching": false,
                          "ordering": true,
                          "info": true,
                          "autoWidth": false,
                      });
            
                    });
            

            【讨论】:

              【解决方案9】:

              我知道已经晚了 购买可以帮助某人

              如果您不在document.ready 中添加$('#myTable').DataTable();,也会发生这种情况

              所以不是这个

              $('#myTable').DataTable();

              试试这个

              $(document).ready(function() {
                  $('#myTable').DataTable();
              });
              

              【讨论】:

                【解决方案10】:

                如果由于某种原因加载了两个版本的 jQuery(不推荐),从第二个版本调用 $.noConflict(true) 会将全局范围的 jQuery 变量返回到第一个版本的变量。

                有时它可能是旧版本(或不稳定)的 JQuery 文件的问题

                解决方案使用$.noConflict();

                <script src="js/jquery.js" type="text/javascript"></script>
                <script src="js/jquery.dataTables.js" type="text/javascript"></script>
                <script>
                $.noConflict();
                jQuery( document ).ready(function( $ ) {
                    $('#myTable').DataTable();
                });
                // Code that uses other library's $ can follow here.
                </script>
                

                【讨论】:

                  【解决方案11】:

                  这对我有用。但请确保在首选 dataTable.js 文件之前加载 jquery.js。干杯!

                  <script type="text/javascript" src="~/Scripts/jquery.js"></script>
                  <script type="text/javascript" src="~/Scripts/data-table/jquery.dataTables.js"></script>
                  
                   <script>$(document).ready(function () {
                      $.noConflict();
                      var table = $('# your selector').DataTable();
                  });</script>
                  

                  【讨论】:

                  • 方法中的 $.noConflict() 调用对我来说是关键。谢谢。
                  【解决方案12】:

                  这里是导出表格插件完美运行所需的全套 JS 和 CSS。

                  希望它能节省您的时间

                     <!--Import jQuery before export.js-->
                      <script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
                  
                  
                      <!--Data Table-->
                      <script type="text/javascript"  src=" https://cdn.datatables.net/1.10.13/js/jquery.dataTables.min.js"></script>
                      <script type="text/javascript"  src=" https://cdn.datatables.net/buttons/1.2.4/js/dataTables.buttons.min.js"></script>
                  
                      <!--Export table buttons-->
                      <script type="text/javascript"  src="https://cdnjs.cloudflare.com/ajax/libs/jszip/2.5.0/jszip.min.js"></script>
                      <script type="text/javascript" src="https://cdn.rawgit.com/bpampuch/pdfmake/0.1.24/build/pdfmake.min.js" ></script>
                      <script type="text/javascript"  src="https://cdn.rawgit.com/bpampuch/pdfmake/0.1.24/build/vfs_fonts.js"></script>
                      <script type="text/javascript" src="https://cdn.datatables.net/buttons/1.2.4/js/buttons.html5.min.js"></script>
                      <script type="text/javascript" src="https://cdn.datatables.net/buttons/1.2.1/js/buttons.print.min.js"></script>
                  
                  <!--Export table button CSS-->
                  
                  <link rel="stylesheet" href="https://cdn.datatables.net/1.10.13/css/jquery.dataTables.min.css">
                  <link rel="stylesheet" href="https://cdn.datatables.net/buttons/1.2.4/css/buttons.dataTables.min.css">
                  

                  javascript 在 id = tbl 的表格上添加导出按钮

                    $('#tbl').DataTable({
                                          dom: 'Bfrtip',
                                          buttons: [
                                              'copy', 'csv', 'excel', 'pdf', 'print'
                                          ]
                                      });
                  

                  结果:-

                  【讨论】:

                  • 我能够在没有“导出表按钮”脚本调用的情况下做到这一点。好东西。
                  【解决方案13】:

                  该错误可能有两个原因:

                  第一

                  您在jquery.js 之前输入jQuery.DataTables.js 所以:-

                  你需要先加载jQuery.js,然后再加载jQuery.DataTables.js

                  第二

                  您在同一页面上使用了两个版本的jQuery.js,因此:-

                  尝试使用更高版本并确保两个链接具有相同版本的jQuery

                  【讨论】:

                  • 实现“TypeError: $(…).DataTable is not a function”的一个潜在问题是,因为 Datatables 开始提供一个选择你自己的下载构建器,所以你在下载中选择了 jquery,但也已经把它放在你的页面上。
                  • 要明确一点——这个错误也是从其他来源抛出的。我让它们按正确的顺序排列,并且没有使用两个 jQuery。以防万一其他可怜的灵魂出现......当它工作时,DataTables 很棒,但它是我喜欢的方式(大约一个小时后才能让另一个 ****** 安装工作!
                  【解决方案14】:

                  我收到这个错误是因为我发现我引用了 jQuery 两次。

                  第一次:在 ASP.NET MVC 的母版页 (_Layout.cshtml) 上,然后再次在当前页面上,所以我在母版页上注释掉了那个。

                  如果你使用的是 ASP.NET MVC,这个 sn-p 可以帮助你

                  @*@Scripts.Render("~/bundles/jquery")*@//comment this line 
                  @Scripts.Render("~/bundles/bootstrap")
                  @RenderSection("scripts", required: false)
                  

                  在当前页面中我添加了这些行

                  <script src="~/scripts/jquery-1.10.2.js"></script>
                  
                  <!-- #region datatables files -->
                  <link rel="stylesheet" type="text/css" href="//cdn.datatables.net/1.10.12/css/jquery.dataTables.min.css" />
                  <script src="//cdn.datatables.net/1.10.12/js/jquery.dataTables.min.js"></script>
                  <!-- #endregion -->
                  

                  希望这对您有所帮助,即使不使用 ASP.NET MVC

                  【讨论】:

                  • 其实我在 _Layout.cshtml 中注释了 jquery.min.js。但是,真正对我有用的是在所有 元素之后将 @RenderSection("scripts", required: false) 放在最底部。
                  • 非常感谢,您的回答结束了 4 小时的安装和重新安装 jquery 数据表!不过我有一个问题:如果我在 _Layout.cshtml 中需要 jQuery,而在 myView.cshtml 中需要数据表,我该怎么办,因为在 myView.cshtml 中不提及 jQuery 会导致“未定义 jQuery”?
                  猜你喜欢
                  • 1970-01-01
                  • 2018-07-20
                  • 2012-11-29
                  • 2015-10-16
                  • 2016-10-07
                  • 2016-04-09
                  • 2015-08-19
                  • 1970-01-01
                  相关资源
                  最近更新 更多