TypeError: 'undefined' n'est pas une fonction (évaluation de '$ (document)')

139
  1. J'utilise un site WordPress.
  2. J'inclus ce script dans l'en-tête.

Lorsque le script se charge, j'obtiens cette erreur:

TypeError: 'undefined' n'est pas une fonction (évaluation de '$ (document)')

Je n'ai aucune idée de ce qui la cause ou de ce que cela signifie même.

Dans Firebug, j'obtiens ceci:

$ n'est pas une fonction

dcolumbus
la source
4
Assurez-vous que vous incluez la bibliothèque jQuery avant votre script personnalisé et qu'il n'y a pas d'erreurs dans l' Netonglet de Firebug (assurez-vous que jQuery est effectivement chargé).
wsanville
... oui, bien sûr, jQuery se charge avant. Je suis presque sûr que c'est un problème WordPress enque.
dcolumbus

Réponses:

239

Wordpress utilise jQuery en mode noConflict par défaut. Vous devez le référencer en utilisant jQuerycomme nom de variable, pas $, par exemple utiliser

jQuery(document);

au lieu de

$(document);

Vous pouvez facilement encapsuler cela dans une fonction auto-exécutable pour faire $à nouveau référence à jQuery (et éviter de polluer également l'espace de noms global), par exemple

(function ($) {
   $(document);
}(jQuery));
El Yobo
la source
5
Le script n'est pas nécessaire; vous pouvez simplement appeler jQuery(document)au lieu de l' $(document)endroit où vous le souhaitez. Si vous voulez utiliser à la $place, alors le script ci-dessus crée simplement une fonction qui prend un argument $puis l'exécute en passant jQuery; en bref, dans la fonction, $pointe vers jQuery comme on peut s'y attendre.
El Yobo
2
En fait, ce que j'ai fait, c'est mettre ma normale $(document).ready(function() { // code });à la place de votre $(document);... qui a fonctionné comme un charme.
dcolumbus
1
Oui, c'est ce que je suggérais - "dans la fonction, $ pointe vers jQuery comme on peut s'y attendre".
El Yobo
Eh bien, cela vous fait gagner quelques caractères de cette façon :) Plus de détails sur la forme! Function () {} () de l'instruction auto-exécutable .
El Yobo
Je sais que c'est l'ancien @ElYobo, mais je pense que vous pouvez modifier votre message et ajouter votre exemple de votre premier commentaire dans la réponse comme deuxième exemple. Merci de me faire gagner du temps =)
Manatax
25

Utilisez jQuery noConflict. Cela a fait des merveilles pour moi

var example=jQuery.noConflict();
example(function(){
example('div#rift_connect').click(function(){
    example('span#resultado').text("Hello, dude!");
    });
});

Autrement dit, en supposant que vous ayez inclus jQuery dans votre HTML

<script language="javascript" type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
Leno Britto
la source
15

Utilisez ceci:

var $ =jQuery.noConflict();
Suman Biswas
la source
11

Essayez cet extrait:

jQuery(function($) {
  // Your code.
})

Cela a fonctionné pour moi, peut-être que cela vous aidera aussi.

Gurpreet Dhanoa
la source
11

J'ai eu ce problème uniquement sur Chrome.

J'ai essayé d'ajouter

var $ =jQuery.noConflict();

juste avant d'appeler

$(document).ready(function () {

Ça a marché.

Merci beaucoup

Le_Dhul
la source
Merci pour celui-ci. Je savais que je pouvais résoudre le problème en utilisant "jQuery" au lieu de "$", mais mon problème était que cela déclenche l'édition de Komodo une fois écrit de cette façon, j'ai donc dû choisir entre obtenir des conseils de code / compléter sur $ ou faire fonctionner mon JavaScript. Cette méthode m'a permis d'avoir les deux.
George Kendros
6

Vérifiez également l'inclusion de jQuery, suivi de certains composants / autres bibliothèques (comme jQuery UI), puis de nouveau par erreur de jQuery - cela redéfinira jQuery et supprimera les assistants de composants (comme .datepicker) de l'instance.

Agrath
la source
4
 ;(function($){
        // your code
    })(jQuery);

Placez votre code js à l'intérieur de la fermeture ci-dessus, cela devrait résoudre le problème.

Bikram Shrestha
la source
4

J'utiliserais ça

(function ($) {
   $(document);
}(jQuery));
Iota
la source
2

J'ai également été confronté à de tels problèmes à plusieurs reprises dans le domaine du développement Web. En fait, ce n'est pas un conflit JS, lorsque nous chargeons un site Web html sur le navigateur, nous ne sommes pas confrontés à une telle erreur, mais lorsque nous chargeons ce type de site Web via localhost, nous sommes confrontés à un tel problème. C'est à cause de localhost. Lorsque nous chargeons des scripts via l'hôte local, il analyse le script et rend la sortie. Mais quand nous n'avons pas utilisé localhost. Il scanne simplement la sortie. Exemple, lorsque nous écrivons du code php à côté de l'hôte local et que nous l'exécutons sans hôte, nous obtenons une erreur. Mais si le code est correct et est exécuté via l'hôte, nous obtenons la sortie réelle, et lorsque nous utilisons l'élément inspect, nous obtenons le code de sortie au format HTMl mais pas au format PHP, c'est à cause du rendu du code.

C'est une erreur de rendu. Donc, pour corriger ces erreurs de code jquery, l'une des solutions peut être d'utiliser cette méthode.

jQuery(document).ready(function($){
/******** Body of Jquery Code*****/
});

Ce que fait ce code est d'enregistrer '$' comme variable de la fonction en appliquant jquery. Sinon, par défaut, le fichier .js est uniquement lu en javascript.

Rajan Lama
la source
1

J'ai rencontré ce problème également lors de l'inclusion de jQuery dans l'en-tête de ma page, ne réalisant pas que l'hôte l'incluait déjà automatiquement dans la page. Alors chargez votre page en direct et vérifiez la source pour voir si jQuery est lié.

FrostyL
la source
1

Deux choses:

  1. Assurez-vous que vous avez ajouté la bibliothèque jQuery, avant votre $ (document).
  2. Ensuite, changez simplement tous les "$" avec: jQuery, comme les commentaires précédents.
Jorge Alejandro Inturias
la source
1

envelopper tout le script entre ceci ...

<script>
    $.noConflict();
    jQuery( document ).ready(function( $ ) {
      // Code that uses jQuery's $ can follow here.
    });
</script>

De nombreuses bibliothèques JavaScript utilisent $ comme fonction ou nom de variable, tout comme le fait jQuery. Dans le cas de jQuery, $ est juste un alias pour jQuery, donc toutes les fonctionnalités sont disponibles sans utiliser $. Si vous devez utiliser une autre bibliothèque JavaScript à côté de jQuery, renvoyez le contrôle de $ à l'autre bibliothèque avec un appel à $ .noConflict () . Les anciennes références de $ sont enregistrées lors de l'initialisation de jQuery; noConflict () les restaure simplement.

Jitendra Damor
la source
1

Vous pouvez utiliser à la fois jQuery et $ dans l'extrait de code ci-dessous. ça a marché pour moi

jQuery( document ).ready(function( $ ) {
  // jQuery(document)
  // $(document)
});
Kalpesh Prajapati
la source
1

Vous pouvez passer $ dans la fonction ()

jQuery(document).ready(function($){

// jQuery code is in here

});

ou vous pouvez remplacer $(document);par cecijQuery(document);

ou vous pouvez utiliser jQuery.noConflict()

var jq=jQuery.noConflict();
jq(document).ready(function(){  
  jq('selector').show();
});
Ganesh
la source