web-dev-qa-db-fra.com

TypeError: $ n'est pas une fonction lors de l'appel de la fonction jQuery

J'ai un simple script jQuery dans un plugin WordPress qui utilise un wrapper jQuery comme ceci:

$(document).ready(function(){

    // jQuery code is in here

});

J'appelle ce script à partir du WordPress Dashboard et je le charge APRÈS le chargement du framework jQuery.

Lorsque je vérifie la page dans Firebug, je reçois constamment le message d'erreur suivant:

TypeError: $ n'est pas une fonction

$ (document) .ready (fonction () {

Dois-je peut-être envelopper le script dans cette fonction:

(function($){

    // jQuery code is in here

})(jQuery);

J'ai eu cette erreur plusieurs fois et je ne sais pas trop comment la gérer.

Toute aide serait grandement appréciée.

195
Jason

Par défaut, lorsque vous mettez en file d'attente jQuery dans Wordpress, vous devez utiliser jQuery, et $ n'est pas utilisé (pour des raisons de compatibilité avec d'autres bibliothèques).

Votre solution consistant à envelopper dans function fonctionnera bien ou vous pouvez charger jQuery d’une autre manière (mais ce n’est probablement pas une bonne idée dans Wordpress).

Si vous devez utiliser document.ready, vous pouvez réellement passer $ dans l'appel de fonction:

jQuery(function ($) { ...
292
Explosion Pills

Cela devrait résoudre le problème:

jQuery(document).ready(function($){
  //you can now use $ as your jQuery object.
  var body = $( 'body' );
});

En termes simples, WordPress exécute son propre script avant que vous puissiez le faire et libère le $ var afin qu'il ne se heurte pas à d'autres bibliothèques. Cela est tout à fait logique, car WordPress est utilisé pour tous les types de sites Web, d'applications et, bien sûr, de blogs.

De leur documentation:

La bibliothèque jQuery fournie avec WordPress est définie sur le mode noConflict () (voir wp-includes/js/jquery/jquery.js). Ceci afin d'éviter des problèmes de compatibilité avec d'autres bibliothèques JavaScript que WordPress peut lier.

En mode noConflict (), le raccourci $ global pour jQuery n'est pas disponible ...

139
Matthew Blancarte

Cette solution a fonctionné pour moi

;(function($){
    // your 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é

22
Bikram Shrestha

Vous pouvez éviter un conflit comme celui-ci

var jq=jQuery.noConflict();
jq(document).ready(function(){  
  alert("Hi this will not conflict now");
  jq('selector').show();
});
19
Ashwani Panwar
var $=jQuery.noConflict();

$(document).ready(function(){
    // jQuery code is in here
});

Nous remercions Ashwani Panwar et Cyssoo pour leur réponse: https://stackoverflow.com/a/29341144/3010027

16
optimiertes

Essaye ça:

<script language="JavaScript" type="text/javascript" src="jquery/jquery.js"></script>
<script>
    jQuery.noConflict();
    (function ($) {
        function readyFn() {
            // Set your code here!!
        }

        $(document).ready(readyFn); 
    })(jQuery);

</script>

Vous devez passer $ in function ()

<script>
jQuery(document).ready(function($){

// jQuery code is in here

});
</script>
8
Jitendra Damor

Vérifiez vos références jQuery. Il est possible que vous le référeniez plus d'une fois ou que vous appeliez votre fonction trop tôt (avant que jQuery ne soit défini). Vous pouvez essayer comme mentionné dans mes commentaires et mettre n'importe quelle référence jQuery en haut de votre fichier (dans la tête) et voir si cela vous aide.

Si vous utilisez l'encapsulation de jQuery, cela ne devrait pas vous aider dans ce cas. S'il vous plaît essayez-le parce que je pense que c'est plus joli et plus évident, mais si jQuery n'est pas défini, vous obtiendrez les mêmes erreurs.

En fin de compte ... jQuery n'est pas actuellement défini.

7
Raghul Manoharan

remplacez le signe $ par jQuery comme ceci:

jQuery(function(){
//your code here
});
6
MaXee Khan

De plus, je trouve la bonne solution pour utiliser le mode jQuery noConflict.

(function($){

  $(document).ready(function(){
      // write code here
  });

  // or also you can write jquery code like this

  jQuery(document).ready(function(){
      // write code here
  });

})(jQuery);

J'ai trouvé cette solution d'ici. https://thecodingstuff.com/how-to-properly-use-jquery-noconflict-mode-in-wordpress/

5
Renish Khunt
(fonction ($) {
 "utiliser strict"; 
 
 $ (fonction () {
 
 // Votre code ici 
 
}); 
 
} (jQuery)); 
4

Ce qui a fonctionné pour moi La première bibliothèque à importer est la bibliothèque de requêtes et à droite appelez la méthode jQuery.noConflict ().

<head>
 <script type="text/javascript" src="jquery.min.js"/>
 <script>
  var jq = jQuery.noConflict();
  jq(document).ready(function(){
  //.... your code here
    });
 </script>
4
PbxMan
<script>
var jq=jQuery.noConflict();
(function ($) 
    {
    function nameoffunction()
    {
        // Set your code here!!
    }

    $(document).ready(readyFn); 
    })(jQuery);

maintenant utiliser jq à la place de jQuery

3
Aman birjpuriya

Vous rencontrez ce problème lorsque votre nom de fonction et l'un des noms d'identifiant du fichier sont identiques. assurez-vous simplement que tous vos noms d'identifiant dans le fichier sont uniques.

3
Laxman Jaygonde

Utilisation

jQuery(document).

au lieu de

$(document).

ou

Au sein de la fonction, $ pointe sur jQuery comme prévu

(function ($) {
   $(document).
}(jQuery));
3
Sanjay

Vous pouvez utiliser

jQuery(document).read(function(){ ... });

ou

(function ($) { ... }(jQuery));
2
Bhavesh Balar