Ошибка типа: $ (…). DataTable не является функцией

50

Я пытаюсь работать с 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 в моем решении выглядит следующим образом:

Изображение 9783

Я добавил все необходимые ссылки JS и CSS, как показано в руководстве. Тем не менее рендеринг не так, как ожидалось. Нет CSS и даже JS не работает.

Также в консоли я получаю следующие ошибки:

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

Я все еще не связывал никаких динамических данных (например, внутри ретранслятора или так), но он не работает.

Может ли кто-нибудь помочь мне в правильном направлении для этой проблемы?

  • 0
    Независимо от того, какой код я написал, все было в порядке, но я также получил эту же ошибку. После долгого анализа я просто перезапустил свой компьютер, так как не перезагружался с последних 7 дней. Затем мой код начал работать.
  • 0
    @Ashokkumar: тебе повезло, наверное!
Теги:
datatables

6 ответов

67
Лучший ответ

Вам нужно загрузить jQuery перед загрузкой любого связанного с jQuery кода, такого как jQuery DataTables, см. ниже:

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

Кроме того, для производственной версии рекомендуется загрузить уменьшенную версию (заканчивающуюся на .min.js).

См. jQuery DataTables: Общие ошибки консоли JavaScript для получения дополнительной информации об этой и других распространенных ошибках консоли.

  • 9
    Я сделал это, но это не работает!
  • 1
    @AbhishekGhosh, у вас была ошибка на скриншоте jQuery is not defined до того, как вы отредактировали свое сообщение, я уверен, что причиной проблемы является неправильный порядок. Обновите кеш браузера, убедитесь, что js/jquery.js на самом деле является библиотекой jQuery, а не чем-то другим и т. Д.
Показать ещё 2 комментария
24

Я получил эту ошибку, потому что обнаружил, что я дважды ссылался на jQuery.

Первый раз: на главной странице (_Layout.cshtml) в ASP.NET MVC, а затем снова на одной текущей странице, поэтому я прокомментировал ее на главной странице.

Если вы используете ASP.NET MVC, этот фрагмент может помочь вам

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

21

Это сработало для меня. Но обязательно загрузите jquery.js перед предпочтительным файлом dataTable.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>
  • 1
    Я использую это в своем угловом коде. Я импортировал его дважды, один в angular.json и один в index.html. Это была моя проблема. Благодарю.
  • 0
    Вызов $ .noConflict () в методе был для меня ключом. Благодарю.
11

если по какой-либо причине загружены две версии 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 $ can follow here.
</script>
6

Вот полный набор 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'
                        ]
                    });

Результат: -

Изображение 112725

4

Для этой ошибки могут быть две причины:

Первая

Вы loding jQuery.DataTables.js до jquery.js, поэтому для этого: -

Вам нужно загрузить jquery.js перед загрузкой jQuery.DataTables.js

Второй

Вы используете две версии jquery.js на той же странице, чтобы: -

Попробуйте использовать более высокую версию и убедитесь, что обе ссылки имеют одну и ту же версию jQuery

  • 0
    Потенциальная проблема для достижения «TypeError: $ (…) .DataTable не является функцией», так как Datatables начал предоставлять сборщик загрузок по собственному выбору, это то, что вы выбираете jquery в загрузке, но также уже имеете его на своей странице.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню