Ich erstelle eine normale Webseite, auf der ich ungefähr fünf CSS-Dateien und zehn Javascript-Dateien laden muss.
- Wenn ich sie separat in die HTML-Seite lade, wird meine Webseite einwandfrei geladen.
Jetzt für die Produktion habe ich das gesamte Javascript in der erforderlichen Reihenfolge zu einer einzigen Datei und das gesamte CSS zu einer anderen Datei verkettet. Wenn ich jedoch versuche, die Webseite mit den verketteten Dateien auszuführen, wird ein Fehler ausgegeben, der besagt:
Uncaught TypeError: undefined is not a function
In der Zeile, in der jquery.min.js in die verkettete Javascript-Datei geladen wird.
Was kann ich tun, um dies zu mildern? Ich möchte alle Dateien verketten und für die Produktion minimieren. Bitte helfen Sie.
BEARBEITEN: Ich habe Javascript und CSS in der Reihenfolge zusammengeführt, in der sie einzeln geladen wurden und einwandfrei funktionierten.
quelle
undefined
wenn Sie keinen Code zum Anzeigen haben?Antworten:
Unter der Annahme, dass dieses Problem immer noch nicht gelöst ist, beenden viele einzelne Dateien ihren Code nicht mit einem Semikolon. Die meisten jQuery-Skripte enden mit
(jQuery)
und Sie müssen haben(jQuery);
.Als separate Dateien wird das Skript problemlos geladen, aber als einzelne Datei benötigen Sie die Semikolons.
quelle
Möglicherweise müssen Sie die Reihenfolge, in der Sie die Dateien zusammenführen, erneut überprüfen. Dies sollte ungefähr so aussehen:
quelle
Diese Lösung hat bei mir funktioniert
Verschieben Sie Ihren Code in den Abschluss und verwenden Sie $ anstelle von jQuery
Ich habe die obige Lösung in /magento/33348/uncaught-typeerror-undefined-is-not-a-function-when-using-a-jquery-plugin-in-ma gefunden
nach zu viel seraching
quelle
Ich habe den gleichen Fehler erhalten, weil ich zwei Verweise auf verschiedene Versionen von jQuery hatte.
Auf meiner Masterseite:
Und auch auf der Seite:
quelle
Ich hatte kürzlich dieses Problem mit dem jQuery Validation-Plug-In , das Squishit verwendet und auch den js-Fehler erhalten hat:
Ich habe das Problem behoben, indem ich den Verweis auf die nicht abgeschlossene Datei jquery.validate.js anstelle von jquery.validate.min.js geändert habe.
Ich denke, dass die verkleinerte Version bestimmter Dateien, wenn sie beispielsweise mit Squishit weiter komprimiert wird, in einigen Fällen nicht mit fehlenden Semikolons und dergleichen umgehen kann, wie @Dustin vorschlägt, sodass Sie möglicherweise experimentieren müssen, mit welchen Dateien Sie arbeiten können doppelt komprimieren und die Sie einfach Squishit überlassen oder was auch immer Sie bündeln.
quelle
Für diejenigen da draußen, die dies immer noch nicht beheben konnten, habe ich mein 'this' bei Verwendung von jQuery in '$ (this)' geändert.
Z.B:
Fest:
quelle
Ich bin auf dasselbe Problem gestoßen, wenn ich fälschlicherweise eine Variable mit demselben Namen als Funktion benannt habe.
Also das:
fehlgeschlagen, wodurch die erwähnte Fehlermeldung des OP generiert wurde.
Die Behebung dieses Problems war so einfach wie das Ändern der obigen Zeile in:
Ich weiß nicht, wie viel es in dieser Situation hilft, aber ich habe beschlossen, diese Antwort anderen zu geben, die nach einer Lösung für ähnliche Probleme suchen.
quelle
Ja, ich habe es auch behoben, indem ich es in den js-Bibliotheken auf unminified geändert habe.
Ändern Sie beispielsweise im Tag Folgendes:
Zum:
Beenden der 'min' als nicht beendet.
Danke für die Idee.
quelle
Denken Sie daran: Javascript-Funktionen sind CASE SENSITIVE.
Ich hatte einen Fall, in dem ich mir ziemlich sicher bin, dass mein Code reibungslos funktionieren würde. Trotzdem habe ich einen Fehler bekommen und die Javascript-Konsole überprüft von Google Chrome überprüft, um zu überprüfen, was es ist.
Meine Fehlerzeile ist
Und bekam die gleiche Fehlermeldung:
Mit dem obigen Code scheint nichts falsch zu sein, aber er wurde nicht ausgeführt. Ich habe fast eine Stunde lang Fehler behoben und sie dann mit meinem anderen laufenden Code verglichen. Mein Fehler ist, dass es eingestellt wurde
SetAttribute
, was sein solltesetAttribute
.quelle
Für den Fall, dass es da draußen Idioten wie mich gibt, hatte ich dieses frustrierende Problem, weil ich ein einfaches vergessen habe
new
Schlüsselwort vor dem Instanziieren eines neuen Objekts.
quelle
Ich hatte gerade die gleiche Nachricht mit dem folgenden Code (in IcedCoffeeScript):
Dies schien mir ein normaler ICS-Code zu sein. Ich habe das Wait-Defer-Konstrukt zu regulärem CoffeeScript entfaltet:
Was wirklich geschah, war, dass ich versuchte, 1 Rückruffunktion (mit 2 Parametern) an die Funktion zu übergeben, wobei ich
f
zwei Parameter erwartete, die praktisch nicht imcb
Inneren eingestellt warenf
und als die der Compiler korrekt gemeldet hatteundefined is not a function
.Der Fehler ist aufgetreten, weil ich blind den Callback-Code eingefügt habe.
f
Es muss keinerr
Parameter übergeben werden, daher sollte es einfach sein:Im Allgemeinen würde ich empfehlen, Funktionssignaturen und Aufrufe auf übereinstimmende Aritäten zu überprüfen. Der Aufrufstapel in der Fehlermeldung sollte hilfreiche Hinweise geben können.
In Ihrem speziellen Fall empfehle ich, nach Funktionsdefinitionen zu suchen, die zweimal in der zusammengeführten Datei mit unterschiedlichen Signaturen oder Zuweisungen zu globalen Variablen mit Funktionen angezeigt werden.
quelle
Stellen Sie sicher, dass Sie Kommentare auskommentiert haben. Manchmal wird beim Kopieren und Einfügen das "/ *!"
Auch wenn Sie in die Konsole gehen, werden Ihre Fehler aufgelistet und Sie sollten es einzeln nehmen. Wenn "Uncaught SyntaxError: Unexpected token *" angezeigt wird, bedeutet dies möglicherweise, dass Ihre js-Datei gelesen wird und die erste Zeile nicht überschritten wird.
/ *! * jquery.tools 1.1.2 - Die fehlende UI-Bibliothek für das 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/ * Generierte Datei: Mi Okt 07 09:40:16 GMT 2009 * /
quelle
Ich habe dies erhalten, als ich versehentlich zu viele Parameter an eine jquery-Funktion übergeben habe, die nur einen Rückrufparameter erwartet hat.
Für andere Fehlerbehebung: Stellen Sie sicher, dass Sie alle Aufrufe Ihrer jquery-Funktion auf zusätzliche Parameter überprüfen.
quelle