TypeError: $ (…) .DataTable không phải là một hàm


90

Tôi đang cố gắng làm việc với Datatable JS của jQuery cho dự án của mình từ liên kết này .

Tôi đã tải xuống toàn bộ thư viện từ cùng một nguồn. Tất cả các ví dụ được đưa ra trong gói dường như hoạt động tốt, nhưng khi tôi cố gắng kết hợp chúng trong của tôi WebForms, CSS, JS hoàn toàn không hoạt động.

Đây là những gì tôi đã làm:

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

Cấu trúc tệp của tôi cho JS và CSS trong Giải pháp của tôi trông như sau:

Cấu trúc tệp của JS và CSS trong giải pháp

Tôi đã thêm tất cả các tham chiếu JS và CSS cần thiết như được hiển thị trong sách hướng dẫn. Vẫn kết xuất không như mong đợi. Không có CSS ​​và thậm chí JS không hoạt động.

Cũng trong bảng điều khiển, tôi gặp các lỗi sau:

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

Tôi vẫn chưa ràng buộc bất kỳ dữ liệu động nào ở đây (như trong một bộ lặp hoặc lâu hơn) nhưng nó vẫn không hoạt động.

Ai đó có thể vui lòng hướng dẫn tôi đi đúng hướng cho vấn đề này không?


Bất kể mã nào tôi đã viết đều hoàn toàn tốt, nhưng tôi cũng gặp lỗi tương tự. Sau khi phân tích dài, tôi vừa khởi động lại PC của mình vì tôi đã không khởi động lại kể từ 7 ngày qua. Sau đó, mã của tôi bắt đầu hoạt động.
Ashok kumar

@Ashokkumar: có lẽ bạn đã gặp may!
Abhishek Ghosh

Câu trả lời:


130

NGUYÊN NHÂN

Có thể có nhiều lý do cho lỗi này.

  • Thư viện jQuery DataTables bị thiếu.
  • Thư viện jQuery được tải sau jQuery DataTables.
  • Nhiều phiên bản của thư viện jQuery được tải.

GIẢI PHÁP

Chỉ bao gồm một phiên bản thư viện jQuery phiên bản 1.7 hoặc mới hơn trước jQuery DataTables.

Ví dụ:

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

Xem jQuery DataTables: Các lỗi bảng điều khiển JavaScript phổ biến để biết thêm thông tin về lỗi này và các lỗi bảng điều khiển phổ biến khác.


45

Điều này đã làm việc cho tôi. Nhưng hãy đảm bảo tải jquery.js trước tệp dataTable.js ưu tiên. Chúc mừng!

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

8
Lời gọi $ .noConflict () trong phương thức là chìa khóa cho tôi. Cảm ơn.
jrebs

36

Tôi gặp lỗi này vì tôi phát hiện ra rằng tôi đã tham chiếu jQuery hai lần.

Lần đầu tiên: trên trang chủ ( _Layout.cshtml) trong ASP.NET MVC, và sau đó một lần nữa trên một trang hiện tại, vì vậy tôi đã nhận xét trang chủ trên trang chính.

Nếu bạn đang sử dụng ASP.NET MVC, đoạn mã này có thể giúp bạn

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

và trong trang hiện tại tôi đã thêm những dòng này

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

Hy vọng điều này sẽ giúp bạn ngay cả khi không sử dụng ASP.NET MVC


Trên thực tế, tôi đã nhận xét jquery.min.js trong _Layout.cshtml. Tuy nhiên, điều thực sự hiệu quả với tôi là đặt @RenderSection ("scripts", bắt buộc: false) ở cuối cùng sau tất cả các phần tử <scripts> </scripts>.
muhammad tayyab

cảm ơn rất nhiều, câu trả lời của bạn đã kết thúc 4 giờ cài đặt và cài đặt lại các tệp dữ liệu jquery! Mặc dù vậy, tôi có một câu hỏi: Nếu tôi cần jQuery trong _Layout.cshtml và cần dữ liệu trong myView.cshtml, thì tôi phải làm gì vì không đề cập jQuery trong myView.cshtml sẽ gây ra "jQuery không được định nghĩa"?
Hamza Dahmoun

19

nếu một lý do nào đó mà hai phiên bản jQuery được tải (không được khuyến nghị), thì việc gọi $.noConflict(true)từ phiên bản thứ hai sẽ trả về các biến jQuery có phạm vi toàn cầu về các biến của phiên bản đầu tiên.

Đôi khi nó có thể có vấn đề với phiên bản cũ hơn (hoặc không ổn định) của tệp JQuery

Giải pháp sử dụng $.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>

sử dụng jquery với laravel với Blade làm công cụ tạo khuôn mẫu của tôi ... Đáng ngạc nhiên là đây là cách duy nhất nó hoạt động với tôi - Tất nhiên bạn biết các nhà phát triển ... Khi nó hoạt động, bạn ngừng tìm kiếm!
daniel Warui

noConflict () đã làm việc cho tôi. Tôi đoán tôi đã cài đặt một số phiên bản jQuery khác.
Aaron

10

Đây là tập hợp đầy đủ JS và CSS cần thiết để plugin bảng xuất hoạt động hoàn hảo.

Hy vọng nó sẽ tiết kiệm thời gian của bạn

   <!--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 để thêm các nút xuất trên bảng với id = tbl

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

Kết quả :-

nhập mô tả hình ảnh ở đây


Tôi đã có thể thực hiện việc này mà không cần lệnh gọi tập lệnh "nút xuất bảng". Đồ tốt.
Đánh dấu

7

Có thể có hai lý do cho lỗi đó:

Đầu tiên

Bạn đang lo lắng jQuery.DataTables.jstrước đây jquery.jscho điều đó: -

Bạn cần tải jQuery.jstrước khi tảijQuery.DataTables.js

Thứ hai

Bạn đang sử dụng hai phiên bản của jQuery.jstrên cùng một trang để: -

Cố gắng sử dụng phiên bản cao hơn và đảm bảo cả hai liên kết đều có cùng phiên bản jQuery


Một vấn đề tiềm ẩn để đạt được "TypeError: $ (…) .DataTable không phải là một chức năng" vì Datatable bắt đầu cung cấp trình tạo tải xuống do bạn chọn là bạn chọn jquery trong tải xuống nhưng cũng đã có nó trên trang của bạn.
Vanquished Wombat

Chỉ cần nói rõ - lỗi này cũng được phát sinh từ các nguồn KHÁC. Tôi đã có chúng theo đúng thứ tự và không sử dụng hai jQuery. Đề phòng trường hợp một số linh hồn tội nghiệp khác xuất hiện .... Khi nó hoạt động DataTables thật tuyệt vời nhưng nó dễ bị bong tróc theo ý thích của tôi (khoảng một giờ nữa để cài đặt ****** khác hoạt động!
BeNice

2

Thành thật mà nói, điều này đã mất hàng giờ để khắc phục sự cố này. Cuối cùng chỉ có một điều làm việc xác nhận lại giải pháp được cung cấp bởi "Basheer AL-MOMANI". Đó chỉ là tuyên bố đặt

   @RenderSection("scripts", required: false)

trong _Layout.cshtmltệp sau tất cả các <script></script>phần tử và cũng nhận xét tập lệnh jquery trong cùng tệp. Thứ hai, tôi phải thêm

 $.noConflict();

trong lệnh gọi hàm jquery tại một tệp * .cshtml khác như:

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

        });

1

Tôi cũng gặp lỗi này. Vì lý do gì tôi đã viết mã ban đầu

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

Điều này sẽ không xảy ra lỗi đôi khi và những lần khác nó sẽ xảy ra. Bằng cách thay đổi mã thành

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

Lỗi dường như đã dừng lại


0

Tôi biết Mua muộn của nó có thể giúp ai đó

Điều này cũng có thể xảy ra nếu bạn không thêm $('#myTable').DataTable();vào bên trongdocument.ready

Vì vậy, thay vì điều này

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

Thử đi

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

0

Trong trường hợp của tôi, giải pháp là xóa cookie khỏi trình duyệt.


0
// you can get the Jquery's librairies online with adding  those two rows in your page

 <script type="text/javascript"  src=" https://cdn.datatables.net/1.10.13/js/jquery.dataTables.min.js"></script> 

<link rel="stylesheet" href="https://cdn.datatables.net/1.10.13/css/jquery.dataTables.min.css"> 

0

Gặp sự cố tương tự trong Flask, tôi đã có một mẫu tải JQuery, Popper và Bootstrap. Tôi đang mở rộng mẫu đó sang mẫu khác mà tôi đang sử dụng làm cơ sở để tải trang có bảng.

Vì một số lý do trong Flask rõ ràng là các tệp trong mẫu bên ngoài tải trước các tệp trong các bảng ở trên trong hệ thống phân cấp (những tệp bạn đang mở rộng) nên JQuery đang tải trước các tệp DataTables gây ra sự cố.

Tôi đã phải tạo một mẫu khác, nơi tôi chạy tất cả các lần nhập JS CDN ở cùng một nơi, điều này đã giải quyết được vấn đề.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.