Uncaught TypeError: undefined non è una funzione durante il caricamento di jquery-min.js


104

Sto costruendo una normale pagina web che mi richiede di caricare circa cinque file CSS e dieci file Javascript.

  • Quando li carichi separatamente nella pagina HTML, la mia pagina web viene caricata correttamente.
  • Ora per la produzione, ho concatenato tutto il Javascript in un unico file, nell'ordine necessario, e tutto il CSS in un altro file. Ma quando provo a eseguire la pagina Web con i file concatenati, viene visualizzato un errore che dice:

    Uncaught TypeError: undefined is not a function

Sulla riga in cui jquery.min.js viene caricato nel file Javascript concatenato.

Cosa posso fare per mitigare questo problema? Voglio concatenare tutti i file e minimizzarli per la produzione. Per favore aiuto.


EDIT: ho unito Javascript e CSS nell'ordine in cui erano quando venivano caricati individualmente e funzionavano bene.


5
come possiamo sapere cosa undefinedsuccede se non hai codice da mostrare?
Joseph

l'indefinito sta arrivando nel jquery-1.6.1.min.js che sto caricando. forse jquery non viene caricato correttamente o qualcosa del genere?
ghostCoder

accettare la risposta di alto rango forse?
Allisone

Risposte:


179

Supponendo che questo problema non sia ancora stato risolto, molti file singoli non terminano il loro codice con un punto e virgola. La maggior parte degli script jQuery termina con (jQuery)e devi avere (jQuery);.

Come file separati, lo script verrà caricato correttamente, ma come un singolo file è necessario il punto e virgola.


18
+1. Quando concatenate il codice JavaScript, dovreste sempre unirli su punti e virgola. Troppe sono ancora valide, mentre meno portano a errori.
Bergi

9
È incredibilmente complicato eseguire il debug. Grazie per una risposta davvero efficace!
ghayes

5
Il js di Bootstrap è uno di questi esempi, a quanto pare. Grazie per questo! Quello era un vero grattacapo.
Kevin Beal

Sto cercando di importare l'API iframe di YouTube e non termina con un punto e virgola e ricevo questo errore. Non lo sto concatenando con nulla ... lo sto caricando con jQuery.getScript (). Quindi ... Potrebbe essere questo che sta causando il mio errore? O non ha senso?
Daniel

1
Come risolviamo questo problema se vediamo questo errore mentre lavoriamo con una libreria? Sto cercando di utilizzare 2.3.2 / js / bootstrap.min.js e /1.4.6/bootstrap-editable/js/bootstrap-editable.min.js
codeObserver

28

Potrebbe essere necessario ricontrollare l'ordine in cui si stanno unendo i file, dovrebbe essere qualcosa del tipo:

  1. jquery.min.js
  2. jquery-ui.js
  3. eventuali plugin di terze parti caricati
  4. il tuo JS personalizzato

è così solo json2.js, jquery-1.6.1.min.js, plugin jquery, il mio codice. è in questo ordine.
ghostCoder

se json2.js utilizza una funzione jquery, allora jquery.min.js dovrebbe essere il primo. io suggerirei. jquery.min.js, jqueryPlugins, json2.js, il mio codice.
Bilal Murtaza


16

Ho ricevuto lo stesso errore dall'avere due riferimenti a diverse versioni di jQuery.

Nella mia pagina principale:

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>

E anche nella pagina:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"> </script>

7

Ho avuto questo problema di recente con il plug-in jQuery Validation , utilizzando Squishit , ottenendo anche l'errore js:

"undefined non è una funzione"

L'ho risolto cambiando il riferimento al file jquery.validate.js non minimizzato, piuttosto che jquery.validate.min.js.

@MvcHtmlString.Create(
    @SquishIt.Framework.Bundle.JavaScript()
        .Add("~/Scripts/Libraries/jquery-1.8.2.min.js")
        .Add("~/Scripts/Libraries/jquery-ui-1.9.1.custom.min.js")
        .Add("~/Scripts/Libraries/jquery.unobtrusive-ajax.min.js")
        .Add("~/Scripts/Libraries/jquery.validate.js")
        .Add("~/Scripts/Libraries/jquery.validate.unobtrusive.js")
         ... more files

Penso che la versione minimizzata di alcuni file, se ulteriormente compressa usando Squishit, ad esempio, potrebbe in alcuni casi non gestire i punti e virgola mancanti e simili, come suggerisce @Dustin, quindi potresti dover sperimentare con quali file puoi comprimere doppiamente, e che lasci semplicemente a Squishit oa qualunque cosa tu stia raggruppando.


Usare la versione non minimizzata era solo il biglietto per me - grazie.
Paul Deen

Per me era il file json2.min.js dalla versione 1.0.2 di un pacchetto NuGet che causava il problema. L'ho passato al file non min e il file combinato di Squishit ora funziona bene.
billoreid

6

Per quelli là fuori che ancora non riuscivano a risolvere questo problema, l'ho fatto cambiando il mio "questo" in "$ (questo)" quando si utilizza jQuery.

PER ESEMPIO:

$('.icon').click(function() {
    this.fadeOut();
});

Fisso:

$('.icon').click(function() {
    $(this).fadeOut();
});

5

Mi sono imbattuto nello stesso problema, quando erroneamente chiamato variabile con lo stesso nome, come funzione.

Così questo:

isLive = isLive(data);

fallito, generando il messaggio di errore menzionato da OP.

Risolvere questo problema era semplice come cambiare la riga sopra in:

isItALive = isLive(data);

Non lo so, quanto aiuta in questa situazione, ma ho deciso di mettere questa risposta ad altri che cercano una soluzione per problemi simili.


5

Sì, ho anche risolto il problema cambiando nelle librerie js in unminified.

Ad esempio, nel tag, modifica:

<script type="text/javascript" src="js/jquery.ui.core.min.js"></script>
<script type="text/javascript" src="js/jquery.ui.widget.min.js"></script>
<script type="text/javascript" src="js/jquery.ui.rcarousel.min.js"></script>

Per:

<script type="text/javascript" src="js/jquery.ui.core.js"></script>
<script type="text/javascript" src="js/jquery.ui.widget.js"></script>
<script type="text/javascript" src="js/jquery.ui.rcarousel.js"></script>

Chiudere il "min" come non minimizzato.

Grazie per l'idea.


3

Ricorda: le funzioni Javascript sono CASE SENSITIVE.

Ho avuto un caso in cui sono abbastanza sicuro che il mio codice avrebbe funzionato senza problemi. Tuttavia, ho ricevuto un errore e ho controllato la console Javascript di Google Chrome per verificare di cosa si tratta.

La mia linea di errore è

opt.SetAttribute("value",values[a]);

E ho ricevuto lo stesso messaggio di errore:

Uncaught TypeError: undefined is not a function

Niente sembra sbagliato con il codice sopra ma non era in esecuzione. Risolvo i problemi per quasi un'ora e poi l'ho confrontato con il mio altro codice in esecuzione. Il mio errore è che era impostato su SetAttribute, il che dovrebbe essere setAttribute.


2

Nel caso in cui ci fossero dei deficienti là fuori come me, ho avuto questo problema frustrante perché ho dimenticato un semplice

new

parola chiave prima di creare un'istanza di un nuovo oggetto.


1

Ho appena ricevuto lo stesso messaggio con il seguente codice (in IcedCoffeeScript):

f = (err,cb) ->
  cb null, true

await f defer err, res
console.log err if err  

Questo mi è sembrato come un normale codice ICS. Ho spiegato il costrutto di attesa-differimento al normale CoffeeScript:

f (err,res) ->
  console.log err if err

Quello che è successo veramente è stato che ho provato a passare 1 funzione di callback (con 2 parametri) alla funzione in fattesa di due parametri, di fatto non impostati cball'interno f, che il compilatore ha correttamente segnalato come undefined is not a function.

L'errore è accaduto perché ho incollato ciecamente il codice boilerplate in stile callback. fnon necessita di un errparametro passato al suo interno, quindi dovrebbe essere semplicemente:

f = (cb) ->
  cb null, true
f (err,res) ->
  console.log err if err

Nel caso generale, consiglierei di ricontrollare le firme delle funzioni e le invocazioni per la corrispondenza delle arità. Lo stack di chiamate nel messaggio di errore dovrebbe essere in grado di fornire suggerimenti utili.

Nel tuo caso speciale, ti consiglio di cercare le definizioni di funzione che compaiono due volte nel file unito, con firme diverse o assegnazioni a variabili globali che contengono funzioni.


1

Assicurati di aver commentato eventuali commenti. A volte durante la copia e incolla si tralascia il "/ *!"

Inoltre, quando vai nella console elencheranno i tuoi errori e dovresti prenderli uno alla volta. Se vedi "Uncaught SyntaxError: Unexpected token *" Ciò potrebbe significare che sta leggendo il tuo file js e non sta superando la prima riga.

/ *! * jquery.tools 1.1.2 - La libreria UI mancante per il Web * * [tools.tabs-1.0.4, tools.tooltip-1.1.2, tools.scrollable-1.1.2, tools.overlay-1.1.2, tools.expose-1.0.5] * * Copyright (c) 2009 Tero Piirainen * http://flowplayer.org/tools/ * File generato: mercoledì 7 ottobre 09:40:16 GMT 2009 * /


0

Ho ottenuto questo quando ho passato accidentalmente troppi parametri in una funzione jquery che prevedeva solo un parametro di callback.

Per la risoluzione dei problemi di altri: assicurati di controllare tutte le chiamate alla funzione jquery per parametri aggiuntivi.

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.