Sto costruendo una normale pagina web che mi richiede di caricare circa cinque file CSS e dieci file Javascript.
Ora per la produzione, ho concatenato tutti i Javascript in un singolo file, nell’ordine richiesto, e tutti i CSS in un altro file. Ma quando provo a eseguire la pagina Web con i file concatenati, viene generato 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? 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:
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.
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.