561 votes

JQuery - $ n'est pas défini

J'ai un événement de clic jquery simple

    $(function() {
        $('#post').click(function() {
            alert("test"); 
        });
    });

et une référence jquery définie dans le site.master

" type="text/javascript">

J'ai vérifié que le script est correctement résolu, je peux voir le balisage et afficher le script directement dans Firebug, donc il doit être trouvé. Cependant, j'obtiens toujours:

$ n'est pas défini

et aucun des jquery ne fonctionne. J'ai également essayé les différentes variations de ceci comme $(document).ready et jQuery, etc.

C'est une application MVC 2 sur .net 3.5, je suis sûr d'être vraiment dense, partout sur Google dit de vérifier que le fichier est correctement référencé, ce que j'ai vérifié et revérifié, merci de conseiller! :/

6 votes

Voyez-vous réellement le fichier jquery-1.3.2.js demandé et chargé avec le code de réponse HTTP200, si vous inspectez le chargement de la page avec l'outil Fiddler?

24 votes

Est-ce que votre script s'exécute avant jQuery?

2 votes

Pouvez-vous afficher la source et cliquer sur le lien js. Il semble que votre jQuery ne soit pas chargé sur la page. Essayez la console Firebug pour voir les erreurs. Essayez aussi ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js dans votre balise de script.

644voto

Mike Trpcic Points 12741

Cette erreur ne peut être causée que par l'une des trois choses suivantes :

  1. Votre fichier JavaScript n'est pas correctement chargé dans votre page
  2. Vous avez une version altérée de jQuery. Cela pourrait arriver parce que quelqu'un a édité le fichier de base, ou qu'un plugin a pu écraser la variable $.
  3. Vous exécutez du JavaScript avant que la page soit entièrement chargée, et par conséquent, avant que jQuery ne soit entièrement chargé.

Tout d'abord, assurez-vous, que le script est appelé correctement, il devrait ressembler à

et ne doit pas avoir les attributs async ou defer.

Ensuite, vous devriez vérifier le panneau réseau Firebug pour voir si le fichier est effectivement correctement chargé. Sinon, il sera surligné en rouge et dira "404" à côté. Si le fichier se charge correctement, cela signifie que le problème est le numéro 2.

Assurez-vous que tout le code JavaScript jQuery est exécuté à l'intérieur d'un bloc de code tel que :

$(document).ready(function () {
  //votre code ici
});

Cela garantira que votre code est chargé après que jQuery ait été initialisé.

Une dernière chose à vérifier est de s'assurer que vous ne chargez aucun plugin avant de charger jQuery. Les plugins étendent l'objet "$", donc si vous chargez un plugin avant de charger le noyau jQuery, alors vous obtiendrez l'erreur que vous avez décrite.

Remarque : Si vous chargez un code qui ne nécessite pas jQuery pour fonctionner, il n'est pas nécessaire de le placer à l'intérieur du gestionnaire de démarrage de jQuery. Ce code peut être séparé en utilisant document.readyState.

207 votes

En ce qui concerne votre bloc de code, $(document) ne fonctionnera pas non plus à moins que vous n'ayez une balise de script incluant jQuery avant cette déclaration...

3 votes

Je voudrais ajouter que j'ai eu le même problème que l'auteur du post et mon souci était que l'utilisation de https avec la bibliothèque jquery ne fonctionne pas très bien.

21 votes

(function($){ })(jQuery);

228voto

Hanky Panky Points 531

Il se pourrait que vous ayez votre balise script appelée avant que le script jquery ne soit appelé.

Cela se traduit par $ qui n'est pas défini

Placez le fichier jquery.js avant votre balise script et ça fonctionnera ;) comme ceci :

1 votes

C'est une excellente réponse. Je l'ai essayé et ça a fonctionné pour moi. J'utilise VS 2013 et ASP.net. Savez-vous comment je peux charger automatiquement javascript avant le chargement de la page en asp.net ou dois-je référencer javascript de cette manière dans tous mes fichiers?

0 votes

Pour compléter votre réponse. En ASP.net, vous pouvez accéder à Shared_Layout.cshtml ` `

0 votes

@pat et assurez-vous d'écrire votre code à l'intérieur d'une balise @section Scripts

82voto

Andy Killen Points 141

Tout d'abord, vous devez vous assurer que le script jQuery est chargé. Cela peut être depuis un CDN ou en local sur votre site web. Si vous ne chargez pas ceci avant d'essayer d'utiliser jQuery, cela vous dira que jQuery n'est pas défini.

Cela peut être dans la balise HEAD ou dans le pied de page de la page, assurez-vous simplement de le charger avant d'essayer d'appeler d'autres éléments de jQuery.

Ensuite, vous devez utiliser l'une des deux solutions ci-dessous

(function($){
// votre code jQuery standard va ici avec le préfixe $
// mieux utilisé à l'intérieur d'une page avec un code en ligne,
// ou en dehors du document prêt, saisissez le code ici
 })(jQuery); 

ou

jQuery(document).ready(function($){
// le code standard au chargement va ici avec le préfixe $
// note : le $ est configuré à l'intérieur de la fonction anonyme de la commande prête
});

veuillez noter que bien des fois $(document).ready(function(){//code ici}); ne fonctionnera pas.

2 votes

"jQuery n'est pas défini". Il existe cependant après le chargement de la page.

0 votes

Je ne suis pas sûr que cela soit une question ou une déclaration, mais je vérifierais si vous appelez le script jQuery avant d'essayer de l'utiliser. On dirait que vous le chargez dans le pied de page et appelez des éléments plus haut dans la page.

0 votes

Désolé, je pensais que c'était une technique que vous pouviez utiliser les scripts dans n'importe quel ordre. Oui, j'utilisais ceci dans la section body dans le style MVC. mycode.js puis jQuery.js sont les 2 dernières choses sur la page.

60voto

dandapereira Points 56

Si l'appel du plugin jQuery se situe juste à côté de , et que votre script est chargé avant cela, vous devez faire en sorte que votre code s'exécute après l'événement window.onload, comme ceci :

window.onload = function() {
  // VOTRE CODE JQUERY
}

`

Ainsi, votre code ne s'exécutera qu'après le chargement de la fenêtre, une fois que tous les éléments auront été chargés. À ce moment-là, le jQuery ($) sera défini.

Si vous utilisez ceci :

$(document).ready(function () {
  // VOTRE CODE JQUERY
});

`

le $ n'est pas encore défini à ce moment-là, car il est appelé avant le chargement de jQuery, et votre script échouera sur cette première ligne dans la console.

0 votes

En général, c'est une mauvaise idée de se connecter à window.unload. Ce sera effectivement le seul événement qui s'exécutera !!!

0 votes

Note : N'oubliez pas que vous ne pouvez attribuer qu'une seule fonction à window.onload. Si vous en attribuez une autre, la précédente ne sera pas exécutée.

30voto

George R Points 1033

J'ai juste fait la même chose et j'ai découvert que j'avais beaucoup de

type="text/javacsript"

Donc ils se chargeaient, mais aucune autre indication sur pourquoi ça ne fonctionnait pas. Inutile de dire que l'orthographe correcte l'a corrigé.

1 votes

Note du modérateur : la faute de frappe dans ce message est délibérée , pour illustrer un point. Veuillez ne pas modifier le message pour le "corriger".

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