Problèmes de base : $ is not a function ou $ is undefined

Voici les 2 erreurs les plus basiques que l’on peut voir dans la console quand on se met à jQuery.

Comment ? Pourquoi ? Que faire ?

$ is undefined

Alternatives : jQuery is undefined

Pourquoi ce message ?
Ce message signifie que jQuery (ou son raccourci $) n’est pas encore défini – lire « présent dans la page » – quand vous essayez de l’utiliser.

Comment résoudre ce problème ?
Dans l’ordre :

  • Avez-vous inclus jQuery dans votre page ?
    1
    <script type="text/javascript" src="chemin/vers/jQuery"/>
  • Ce chemin est-il bon ? (Attention aux chemins absolus et relatifs)
  • Utilisez-vous https ou un chemin commençant par « // » sans autres indications ? Dans le 1er cas, il peut y avoir un problème de sécurité, dans le 2ème, ça ne fonctionne pas depuis le file system, tentez depuis un serveur HTTP.
  • Vérifiez depuis l’onglet « Network » ou « Réseau » de votre console que 1- jQuery est bien appelé et 2- que le code retour est bien OK (200, 302, etc.)

$ is not a function

Alternatives : jQuery is not a function

Pourquoi ce message ?
Ce message signifie que jQuery (ou son raccourci $) ont été redéfinis (la plupart du temps, une autre librairie utilise « $ » comme raccourci).

Comment résoudre ce problème ?
Dans l’ordre :

  • Pouvez-vous choisir entre l’une ou l’autre des librairies ? Si oui, n’hésitez pas et n’en gardez qu’une seule. Vous gagnerez en poids.
  • Si l’erreur est sur « $ », utilisez « jQuery » à la place. Il est rarement utilisé ;-). Exemple : au lieu de
    1
    $(document).ready(...

    , vous aurez

    1
    jQuery(document).ready(...
  • Si cela ne fonctionne toujours pas (par exemple, dans le cas de l’utilisation d’un plugin), utilisez le
    1
    .noConflict()

  • Enfin, si vous n’utilisez pas de plugins, vous pouvez utiliser des raccourcis tels que
    1
    2
    3
    jQuery(document).ready(function( $ ) {
    /* some code that uses $ */
    })

    ou

    1
    2
    3
    (function($) {
    /* some code that uses $ */
     })(jQuery);

Laisser un commentaire