795 votes

Uncaught ReferenceError : $ n'est pas défini ?

Comment se fait-il que ce code jette un

Uncaught ReferenceError : $ n'est pas défini

alors que tout allait bien avant ?

$(document).ready(function() {
    $('#tabs > ul').tabs({ fx: { opacity: 'toggle' } });
    $('#featuredvid > ul').tabs();
});

Les résultats dans les onglets ne se ferment plus.

jQuery est référencé dans l'en-tête :

<script language="JavaScript" type="text/javascript" src="<?php echo get_option('siteurl') ?>/js/sprinkle.js"></script>
<script language="JavaScript" type="text/javascript" src="<?php echo get_option('siteurl') ?>/js/jquery-1.2.6.min.js"></script>
<script language="JavaScript" type="text/javascript" src="<?php echo get_option('siteurl') ?>/js/jquery-ui-personalized-1.5.2.packed.js"></script>

0 votes

<script language="JavaScript" type="text/javascript" src="<?php echo get_option('siteurl') ?>/js/jquery-1.2.6.min.js"></script>Prenez ceci par-dessus

0 votes

Dans mon cas, le JQuery était sur la section du pied de page, donc la fonction JS a été appelée en premier.

0 votes

Cela répond-il à votre question ? ReferenceError : $ n'est pas défini

770voto

Jeremy Points 3516

Vous devriez mettre les références aux scripts jquery en premier.

<script language="JavaScript" type="text/javascript" src="/js/jquery-1.2.6.min.js"></script>
<script language="JavaScript" type="text/javascript" src="/js/jquery-ui-personalized-1.5.2.packed.js"></script>
<script language="JavaScript" type="text/javascript" src="/js/sprinkle.js"></script>

33 votes

Juste pour être sûr que c'est clair : vous ne pouvez pas mettre la référence script à jquery-ui avant le script de jquery lui-même. C'est ce qui a réglé le problème pour moi : d'abord jquery-x.x.x.min.js, puis jquery-ui-xxxxxx.js.

32 votes

2 ans plus tard, la réponse n'est toujours pas "cochée" ;) Cet article décrit celle-ci et 4 autres cas courants où cette erreur se produit.

2 votes

@Uzbekjon Cela a résolu le problème pour moi. Le chemin vers le script était erroné dans un de mon HTML des fichiers.

283voto

Open Source Points 819

Vous appelez la fonction ready avant que le JavaScript de jQuery ne soit inclus. Référencez d'abord jQuery.

38 votes

@RamSharma En fait, c'est la bonne réponse. Vous n'avez besoin de rien d'autre pour résoudre le problème.

0 votes

Yup. C'était mon problème. J'avais simplement jquery APRÈS avoir référencé mon fichier js. D'oh !

0 votes

Dans mon cas, j'ai dû supprimer la clé defer de <script src="/js/jquery-1.2.6.min.js" defer></script>.

166voto

Marlin Mixon Points 359

C'est ce qui a résolu le problème pour moi. Au départ, je suis allé sur Google et j'ai copié-collé l'extrait de code suggéré pour jQuery sur leur page CDN :

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

L'extrait ne comprend pas l'élément HTTP: ou HTTPS: dans le src mais mon navigateur, FireFox, en avait besoin et je l'ai donc changé en : edit : cela a fonctionné pour moi avec Google Chrome également

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

Puis ça a marché.

14 votes

À proprement parler, l'extrait/exemple de Google est correct - son attribut src est une URL sans protocole, ce qui signifie que le navigateur doit utiliser le protocole (HTTP/HTTPS) de la page appelante. Voir paulirish.com/2010/le-protocole-relatif-url . Il s'agit de la meilleure pratique pour éviter les avertissements de contenu mixte si votre page est servie par SSL et que les scripts ne le sont pas.

13 votes

Un problème courant dans ce cas, probablement, est l'utilisation d'URL relatives au protocole pendant le développement, et par une journée ensoleillée, vous essayez de charger une page à partir d'un fichier local. Votre navigateur essaiera de façon optimiste de charger file://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min‌​.js et tu te demandes pourquoi ça n'apparaît pas dans la console réseau.

0 votes

Merci @PieterEnnes, c'était exactement le cas pour moi. Merci aussi à celui qui a répondu !

48voto

Jnana Points 188

Si votre script personnalisé est chargé avant que le plugin jQuery soit chargé dans le navigateur, ce type de problème peut se produire. Donc, gardez toujours votre propre code JavaScript ou jQuery après avoir appelé le plugin jQuery donc la solution pour cela est :

Ajoutez d'abord le lien vers le fichier jQuery hébergé sur GoogleApis ou un fichier jQuery local que vous allez télécharger à partir de http://jquery.com/download/ et l'héberger sur votre serveur :

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

ou tout autre plugin pour jQuery. Ensuite, mettez votre lien ou code de fichier script personnalisé :

<script src="js/custom.js" type="text/javascript"></script>

5 votes

If your custom script is loaded before the jQuery plugin is loaded to the browser then this type of problem may occur la réponse parfaite dans mon cas script était dans le pied de page

29voto

Sudipta Chatterjee Points 1396

Ok, mon problème était différent - c'était Sécurité des documents modèle en Chrome .

En regardant les réponses ici, il était évident que je ne chargeais pas mes fichiers jquery avant d'appeler la fonction $(document).ready() etc. Cependant, ils étaient tous dans les positions correctes.

Dans mon cas, c'était parce que j'accédais au contenu via une connexion HTTPS sécurisée, alors que la page essayait de télécharger les données hébergées par le CDN depuis google, etc. La solution consistait à les stocker localement et à les inclure directement plutôt qu'à partir du CDN à chaque fois.

Modifier : L'autre façon de procéder consiste à établir un lien vers tous les éléments hébergés par le CDN en tant que https:// plutôt que http:// - le modèle ne se plaint alors pas.

5 votes

Notez également que vous pouvez laisser le protocole hors des liens et qu'il choisira le protocole approprié en fonction du contexte (en supposant que les versions http et https existent). Voir stackoverflow.com/a/3622615/4332

0 votes

J'avais chargé les scripts à partir d'une URL comme '//cdnjs.cloudflare.com/ajax/libs/jquery/1.12.0/jquery.min.js'. En utilisant ' cdnjs ...' fonctionne très bien

0 votes

Le https (plutôt que le http) a fonctionné pour moi, merci.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X