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

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

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

Cosa posso fare per mitigare questo? Voglio concatenare tutti i file e ridurli alla produzione. Per favore aiuto.

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

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

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

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 plug-in di terze parti caricati
  4. il tuo JS personalizzato

Questa soluzione ha funzionato per me

     ; (Function ($) {
         // il tuo codice
     }) (JQuery);

Sposta il tuo codice all’interno della chiusura e usa $ invece di jQuery

Ho trovato la soluzione di cui sopra in https://magento.stackexchange.com/questions/33348/uncaught-typeerror-undefined-is-not-a-function-when-using-a-jquery-plugin-in-ma

dopo aver passato troppo tempo

Ho avuto lo stesso errore dall’avere due riferimenti a diverse versioni di jQuery.

Nella mia pagina principale:

  

E anche sulla pagina:

  

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

“indefinito non è una funzione”

L’ho risolto cambiando il riferimento al file jquery.validate.js non ancora terminato, anziché a 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 minificata di alcuni file, quando ulteriormente compresso usando Squishit, per esempio, in alcuni casi non possa occuparsi di mancanza di punti e virgola, come suggerisce @Dustin, quindi potresti dover sperimentare con quali file puoi doppiamente comprime e che lasci a Squishit o qualsiasi altra cosa tu stia impacchettando.

Per quelli là fuori che ancora non sono riusciti a risolvere questo problema, l’ho fatto cambiando il mio ‘questo’ a ‘$ (questo)’ quando si utilizza jQuery.

PER ESEMPIO:

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

Fisso:

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

Ho incontrato lo stesso problema, quando erroneamente ho chiamato una variabile con lo stesso nome, come funzione.

Così questo:

 isLive = isLive(data); 

fallito, generando il messaggio di errore menzionato dall’OP.

Risolvere il problema era semplice come cambiare la linea sopra per:

 isItALive = isLive(data); 

Non so, quanto aiuta in questa situazione, ma ho deciso di mettere questa risposta per gli altri alla ricerca di una soluzione per problemi simili.

Sì, ho anche risolto il problema cambiando nelle librerie js al non ancora terminato.

Ad esempio, nel tag, modifica:

    

Per:

    

Chiusura del ‘min’ come non terminato.

Grazie per l’idea.

Ricorda: le funzioni Javascript sono CASE SENSITIVE.

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

La mia riga di errore è

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

E ho ricevuto lo stesso messaggio di errore:

 Uncaught TypeError: undefined is not a function 

Nulla sembra sbagliato con il codice sopra ma non funzionava. Risolvo i problemi per quasi un’ora e poi l’ho confrontato con il mio altro codice di esecuzione. Il mio errore è che è stato impostato su SetAttribute , che dovrebbe essere impostato su SetAttribute .

Ho appena avuto 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 

Mi sembrava un normale codice ICS. Ho spiegato il costrutto dell’attesa-differimento al normale CoffeeScript:

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

Ciò che è realmente accaduto è che ho provato a passare 1 funzione di callback (con 2 parametri) per funzionare in attesa di due parametri, in pratica non impostando cb all’interno di f , che il compilatore ha correttamente segnalato come undefined is not a function .

L’errore è accaduto perché ho incollato ciecamente codice boilerstate in stile callback. f non ha bisogno di un parametro err passato, 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 e le invocazioni di funzioni per le corrispondenze. Lo stack di chiamate nel messaggio di errore dovrebbe essere in grado di fornire suggerimenti utili.

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

Assicurati di aver commentato eventuali commenti. A volte quando copi e incolli lascerai il “/ *!”

Inoltre, quando entri nella console, elencheranno i tuoi errori e dovresti prenderli uno alla volta. Se vedi “Uncaught SyntaxError: Unexpected token *” potrebbe significare che sta leggendo il tuo file js e che 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: Wed Oct 07 09:40:16 GMT 2009 * /

Nel caso ci fossero 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 object.

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

Per la risoluzione di altri problemi: assicurati di controllare tutte le chiamate della funzione jQuery per parametri aggiuntivi.