web-dev-qa-db-fra.com

Uncaught TypeError: undefined n'est pas une fonction lors du chargement de jquery-min.js

Je construis une page Web normale qui nécessite de charger environ cinq fichiers CSS et dix fichiers Javascript.

  • Lorsque je les charge séparément dans la page HTML, ma page Web se charge correctement.
  • 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.

103
ghostCoder

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.

175
Dustin

Vous devrez peut-être vérifier à nouveau l'ordre dans lequel vous fusionnez les fichiers. Cela devrait ressembler à ceci:

  1. jquery.min.js
  2. jquery-ui.js
  3. les plugins tiers que vous chargez
  4. votre JS personnalisé
27
Bilal Murtaza

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é

17
Bikram Shrestha

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>
15
scw

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.

6
Ralph Lavelle

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();
});
5
Jack Nicholson

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.

4
trejder

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.

4
Francisco Alonso

Rappelez-vous: les fonctions Javascript sont sensibles à la casse.

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.

2
Logan Wayne

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.

1
CodyBugstein

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 * /

1
Tasha

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.

1
Jens Jensen

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.

0
JSideris