TypeError: $ (…) .DataTable non è una funzione


91

Sto cercando di lavorare con JS Datatable di jQuery per il mio progetto da questo collegamento.

Ho scaricato la libreria completa dalla stessa fonte. Tutti gli esempi forniti nel pacchetto sembrano funzionare bene, ma quando provo a incorporarli nel mio WebFormsCSS, JS non funzionano affatto.

Ecco cosa ho fatto:

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

La struttura dei miei file per JS e CSS nella mia soluzione è la seguente:

Struttura dei file di JS e CSS in soluzione

Ho aggiunto tutti i riferimenti JS e CSS necessari come mostrato nel manuale. Tuttavia il rendering non è come previsto. Non c'è CSS e anche il JS non funziona.

Anche nella console ottengo i seguenti errori:

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

Non ho ancora associato alcun dato dinamico qui (come all'interno di un ripetitore o giù di lì) eppure non funziona.

Qualcuno può guidarmi nella giusta direzione per questo problema?


Qualunque sia il codice che ho scritto andava perfettamente bene, ma ho anche ricevuto lo stesso errore. Dopo una lunga analisi, ho appena riavviato il mio PC poiché non ho riavviato negli ultimi 7 giorni. Quindi, il mio codice ha iniziato a funzionare.
Ashok kumar

@Ashokkumar: probabilmente sei stato fortunato!
Abhishek Ghosh

Risposte:


134

CAUSA

Potrebbero esserci più ragioni per questo errore.

  • La libreria jQuery DataTables è mancante.
  • La libreria jQuery viene caricata dopo jQuery DataTables.
  • Vengono caricate più versioni della libreria jQuery.

SOLUZIONE

Include solo una versione della libreria jQuery versione 1.7 o successiva prima di jQuery DataTables.

Per esempio:

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

Vedere jQuery DataTables: errori comuni della console JavaScript per ulteriori informazioni su questo e altri errori comuni della console.


46

Questo ha funzionato per me. Ma assicurati di caricare jquery.js prima del file dataTable.js preferito. Saluti!

<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
La chiamata $ .noConflict () nel metodo è stata la chiave per me. Grazie.
jrebs

37

Ho ricevuto questo errore perché ho scoperto di aver fatto riferimento a jQuery due volte.

La prima volta: sulla pagina master ( _Layout.cshtml) in ASP.NET MVC, e poi di nuovo su una pagina corrente, quindi ho commentato quella sulla pagina master.

Se stai usando ASP.NET MVC, questo frammento potrebbe aiutarti

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

e nella pagina corrente ho aggiunto queste righe

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

Spero che questo ti aiuti anche se non usi ASP.NET MVC


In realtà, ho commentato jquery.min.js all'interno di _Layout.cshtml. Tuttavia, ciò che ha funzionato davvero per me è stato mettere @RenderSection ("scripts", required: false) in fondo dopo tutti gli elementi <scripts> </scripts>.
muhammad tayyab

grazie mille, la tua risposta ha terminato 4 ore di installazione e reinstallazione dei datatables di jquery! Ho una domanda però: cosa devo fare se avessi bisogno di jQuery in _Layout.cshtml e dei dati necessari in myView.cshtml, cosa dovrei fare poiché non menzionare jQuery in myView.cshtml causerà "jQuery non è definito"?
Hamza Dahmoun

19

se per qualche motivo vengono caricate due versioni di jQuery (cosa non consigliata), la chiamata $.noConflict(true)dalla seconda versione restituirà le variabili jQuery con ambito globale a quelle della prima versione.

A volte potrebbe essere un problema con la versione precedente (o non stabile) dei file JQuery

Uso della soluzione $.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>

usando jquery con laravel con Blade come motore di creazione dei modelli ... Sorprendentemente questo è l'unico modo in cui ha funzionato per me - Certo che conosci gli sviluppatori ... Quando funziona, smetti di cercare!
daniel Warui

noConflict () ha funzionato per me. Immagino di aver installato qualche altra versione di jQuery.
Aaron

10

Ecco il set completo di JS e CSS richiesto per il perfetto funzionamento del plug-in della tabella di esportazione.

Spero che ti farà risparmiare tempo

   <!--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 per aggiungere pulsanti di esportazione sulla tabella con id = tbl

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

Risultato: -

inserisci qui la descrizione dell'immagine


Sono stato in grado di farlo senza le chiamate di script "esporta pulsanti tabella". Roba buona.
Marco

7

Ci possono essere due ragioni per questo errore:

Primo

Stai alloggiando jQuery.DataTables.jsprima, jquery.jsquindi per questo: -

È necessario caricare jQuery.jsprima di caricarejQuery.DataTables.js

Secondo

Stai utilizzando due versioni di jQuery.jssulla stessa pagina, quindi per quello: -

Prova a utilizzare la versione successiva e assicurati che entrambi i link abbiano la stessa versione di jQuery


Un potenziale problema per ottenere "TypeError: $ (…) .DataTable non è una funzione" da quando Datatables ha iniziato a fornire un generatore di download da scegliere è che selezioni jquery nel download ma lo hai già sulla tua pagina.
Vombato sconfitto il

Giusto per essere chiari, questo errore viene generato anche da ALTRE fonti. Li avevo nell'ordine giusto e non usavo due jQuerys. Nel caso in cui arrivasse qualche altra povera anima ... Quando funziona DataTables è meraviglioso ma è un po 'traballante per i miei gusti (circa un'ora per far funzionare un'altra installazione ******!
BeNice

3

Onestamente, ci sono volute ore per risolverlo. Finalmente solo una cosa ha funzionato una riconferma alla soluzione fornita da "Basheer AL-MOMANI". Che è solo una dichiarazione

   @RenderSection("scripts", required: false)

all'interno del _Layout.cshtmlfile dopo tutti gli <script></script>elementi e anche commentando lo script jquery nello stesso file. In secondo luogo, ho dovuto aggiungere

 $.noConflict();

all'interno della chiamata della funzione jquery in un altro file * .cshtml come:

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

        });

1

Mi sono imbattuto anche in questo errore. Per qualsiasi motivo avevo originariamente codificato

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

Questo non genererebbe l'errore a volte e altre volte lo sarebbe. Modificando il codice in

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

L'errore sembra essersi fermato


0

So che è tardi che Buy può aiutare qualcuno

Questo potrebbe accadere anche se non aggiungi $('#myTable').DataTable();all'interno del filedocument.ready

Quindi invece di questo

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

Prova questo

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

0

Nel mio caso la soluzione è stata quella di eliminare i cookie dal browser.


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

Avendo lo stesso problema in Flask, avevo già un modello che caricava JQuery, Popper e Bootstrap. Stavo estendendo quel modello in un altro modello che stavo usando come base per caricare la pagina che aveva la tabella.

Per qualche ragione in Flask apparentemente i file nel modello esterno vengono caricati prima dei file nelle tabelle sopra nella gerarchia (quelli che stai estendendo), quindi JQuery si stava caricando prima dei file DataTables che causavano il problema.

Ho dovuto creare un altro modello in cui eseguo tutte le mie importazioni di CDN JS nello stesso posto, risolvendo il problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.