Je construis une page Web normale qui nécessite de charger environ cinq fichiers CSS et dix fichiers Javascript.
Maintenant, pour la production, j'ai concaténé tout le Javascript dans un seul fichier, dans l'ordre requis, et tous les CSS dans un autre fichier. Mais lorsque j'essaie d'exécuter la page Web avec les fichiers concaténés, une erreur est générée:
Uncaught TypeError: undefined is not a function
Sur la ligne où jquery.min.js est chargé dans le fichier Javascript concaténé.
Que puis-je faire pour atténuer cela? Je veux concaténer tous les fichiers et les réduire en vue de leur production. S'il vous plaît aider.
EDIT: J'ai fusionné le code JavaScript et le code CSS dans l'ordre dans lequel ils se trouvaient lorsqu'ils étaient chargés individuellement et fonctionnaient correctement.
En supposant que ce problème ne soit toujours pas résolu, de nombreux fichiers individuels ne terminent pas leur code par un point-virgule. La plupart des scripts jQuery se terminent par (jQuery)
et vous devez avoir (jQuery);
.
En tant que fichiers séparés, le script se charge très bien, mais vous avez besoin des points-virgules.
Vous devrez peut-être vérifier à nouveau l'ordre dans lequel vous fusionnez les fichiers. Cela devrait ressembler à ceci:
Cette solution a fonctionné pour moi
; (function ($) { // votre code }) (jQuery);
Déplacez votre code dans la fermeture et utilisez $ au lieu de jQuery
J'ai trouvé la solution ci-dessus dans https://magento.stackexchange.com/questions/33348/uncaught-typeerror- undefined-is-not-a-function-when-using-a-jquery-plugin-in- ma
après avoir trop cherché
J'ai eu la même erreur d'avoir deux références à différentes versions de jQuery.
Dans ma page principale:
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
Et aussi sur la page:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"> </script>
J'ai eu ce problème récemment avec le plug-in de validation jQuery , en utilisant Squishit , obtenant également l'erreur js:
"indéfini n'est pas une fonction"
Je l'ai corrigé en changeant la référence dans le fichier jquery.validate.js nonminified , plutôt que 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
Je pense que la version simplifiée de certains fichiers, lorsqu'elle est davantage comprimée à l'aide de Squishit, par exemple, pourrait dans certains cas ne pas traiter des points-virgules manquants, etc., comme @Dustin le suggère, de sorte que vous devrez peut-être essayer quels fichiers vous pouvez utiliser. Doucement compresser, et que vous laissez à Squishit ou ce que vous regroupez.
Pour ceux qui ne pouvaient toujours pas résoudre ce problème, je l’ai fait en changeant mon 'ceci' en '$ (ceci)' lorsque jQuery était utilisé.
PAR EXEMPLE:
$('.icon').click(function() {
this.fadeOut();
});
Fixé:
$('.icon').click(function() {
$(this).fadeOut();
});
J'ai rencontré le même problème, lorsque j'ai nommé par erreur une variable portant le même nom, en tant que fonction.
Donc ça:
isLive = isLive(data);
a échoué, générant le message d'erreur mentionné par OP.
La solution à cela était aussi simple que de changer la ligne ci-dessus en:
isItALive = isLive(data);
Je ne sais pas dans quelle mesure cela aide-t-il dans cette situation, mais j'ai décidé de proposer cette réponse aux autres à la recherche d'une solution à des problèmes similaires.
Oui, j’ai aussi corrigé le changement dans les bibliothèques js vers les fichiers non terminés.
Par exemple, dans la balise, changez:
<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>
Pour:
<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>
Quitter le 'min' comme étant non miné.
Merci pour l'idée.
J'ai eu un cas où je suis à peu près sûr que mon code fonctionnerait bien. Mais toujours, j'ai eu une erreur et j'ai vérifié le console Javascript de Google Chrome pour vérifier ce que c'est.
Ma ligne d'erreur est
opt.SetAttribute("value",values[a]);
Et j'ai le même message d'erreur:
Uncaught TypeError: undefined is not a function
Rien ne semble mal avec le code ci-dessus, mais il ne fonctionnait pas. Je dépanne pendant presque une heure et le compare ensuite à mon autre code en cours d'exécution. Mon erreur est qu'il a été réglé sur SetAttribute
, ce qui devrait être setAttribute
.
Au cas où il y aurait des abrutis comme moi, j’avais ce problème frustrant parce que j’avais oublié un
new
mot-clé avant d'instancier un nouvel objet.
Assurez-vous d'avoir commenté tous les commentaires. Parfois, en copiant et collant, vous omettez le "/ *!"
De plus, lorsque vous entrez dans la console, ils répertorient vos erreurs et vous devez les prendre une à la fois. Si vous voyez "Uncaught SyntaxError: Jeton inattendu *", cela signifie peut-être que le fichier js est lu et que la première ligne n'est pas dépassée.
/ *! * jquery.tools 1.1.2 - La bibliothèque d’interface utilisateur manquante pour le 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] * * Droits d'auteur (c) 2009 Tero Piirainen * http://flowplayer.org/tools/ * Fichier généré: mer. 07 oct. 09:40:16 GMT 2009 * /
Je viens de recevoir le même message avec le code suivant (en IcedCoffeeScript):
f = (err,cb) ->
cb null, true
await f defer err, res
console.log err if err
Cela me semblait être du code ICS normal. J'ai déplié la construction wait-différer en CoffeeScript classique:
f (err,res) ->
console.log err if err
Ce qui s’est vraiment passé, c’est que j’ai essayé de transmettre une fonction de rappel (avec deux paramètres) à la fonction f
en attendant deux paramètres, sans pour autant définir cb
dans f
, que le compilateur a correctement signalé comme undefined is not a function
.
L'erreur est due au fait que j'ai collé à l'aveuglette du code passe-partout de style rappel. f
n'a pas besoin de passer un paramètre err
, il devrait donc simplement être:
f = (cb) ->
cb null, true
f (err,res) ->
console.log err if err
Dans le cas général, je recommanderais de vérifier deux fois les signatures et les appels de fonction pour les arités correspondantes. La pile d'appels dans le message d'erreur devrait pouvoir fournir des astuces utiles.
Dans votre cas particulier, je vous recommande de rechercher des définitions de fonction apparaissant deux fois dans le fichier fusionné, avec des signatures différentes, ou des assignations à des variables globales contenant des fonctions.
Je l’ai eu quand j’ai accidentellement passé trop de paramètres dans une fonction jquery qui ne prévoyait qu’un paramètre de rappel.
Pour les autres dépanneurs: vérifiez que tous vos appels de fonction jQuery ont des paramètres supplémentaires.