7
votes

Comment corriger "typeError: $ n'est pas une fonction" erreur dans la page personnalisée WordPress?

J'ai créé une page WordPress personnalisée via plugin où je veux basculer les commentaires activés / désactivé à l'aide de ce code

<script type="text/javascript">                 
  $("comment_switch").click(function () {
    $("comments").toggleClass("hidden");
  });
</script> 


3 commentaires

corps ok mais corps au début (lorsque le DOM n'est toujours pas lu) ou avant ?


Avez-vous vérifié le chemin du fichier jQuery et vous êtes assuré qu'il est valide


Plus probablement, alors pas jQuery fonctionne en mode NOCONFLICT. essayez de remplacer jQuery pour $ pour confirmer


3 Réponses :


29
votes

Vous manquez probablement certains . balise de classe et la fonction DOM READY xxx


11 commentaires

Oui, oui :-) Vous avez raison avec les deux problèmes. Je n'ai pas vérifié à 100% le code de Stackoverflow.com/a/3102240/250422 Je peux comprendre les points manquants Mais pourriez-vous expliquer pourquoi j'ai dû utiliser jQuery (fonction ($) ? merci.


@Radek est probablement parce que WordPress utilise $. NOCONFLICT qui fait $ pas égal à jQuery . Vous pouvez probablement simplement simplement remplacer $ avec jQuery pour faire fonctionner votre code, en supposant qu'il soit immédiatement avant la balise de fermeture de fermeture. Le code de cette réponse permet de fonctionner car il utilise jQuery à l'extérieur, puis accepter l'argument transduit (qui se trouve tout simplement être jQuery ) avec un nom de $ que vous avez ensuite utilisé à l'intérieur de votre code.


@Radek ce que j'ai fait est: obtenez fenêtre.jQuery Attribuer comme argument de référence le $ , de cette façon dans la fonction "code> $ est attribué à la fenêtre jQuery référence. C'est une manière à faible niveau que dans 90% des cas dignes du noconflic. Il vous empêche de taper plus encore jQuery au lieu de la référence $ .


@ Rokoc.buljan à droite, mais vous faites aussi plus que cela. Vous supposez que le code doit être à l'intérieur d'un document prêt, ce qui est incorrect dans ce cas en raison de l'emplacement du script. Tout le problème est $! == jQuery , que votre code résout en utilisant l'argument attribué à jQuery (fonction (ici) {})


@Radek c'est, à moins que $ .noconflic exerce soit utilisé, ce qui est très courant avec WordPress.


@Kevinb Bien sûr, la plupart des utilisateurs utilisant WP ont-ils été étonnés qu'ils pouvaient définir jQuery ($) { et fonctionnait dans tous les cas sans utilisation de NOCONF. Et jQuery < / code> partout sur la place :)


Comment puis-je savoir si $. NOCONFLICT a été utilisé?


@Radek est $ équivalent à jQuery ? Sinon, alors c'est un bon choix qu'il est utilisé, c'est-à-dire que ou quelque chose est de remplacer $ .


@Radek Vous pouvez toujours inspecter votre console pour les scripts utilisé dans votre page et trouver le match souhaité. En outre, ce n'est pas moyen (OK, 99,99%) qu'une autre bibliothèque est enregistrée à l'objet Window comme jQuery , à l'aide de l'appel d'objet jQuery d'objet et référençant-le à l'intérieur de l'ARG fonction comme $ vous laisse mains libres à go;) avec le plus cher alias.


Ok les gars, je n'ai aucune idée de ce que vous prenez. Il me semble trop profond pour moi. Pourriez-vous recommander une lecture pour moi? Merci à vous deux.


@Radek Lecture intéressante: Stackoverflow.com/questions / 4983150 / ...



-2
votes

Vous devez encapsuler votre javascript dans la fonction qui s'exécute sur Dom Ready Event

<script type="text/javascript">                 
 $(function () {
   $("comment_switch").click(function () {
    $("comments").toggleClass("hidden");
  });
});
</script> 


5 commentaires

$ n'est pas une fonction, mais vous l'appelez toujours.


@ user3502626 Je ne sais pas comment vous êtes capable de faire des instructions comme ça, $ est un raccourci vers jQuery et jQuery est une fonction, de sorte que $


J'ai testé votre code mais, il n'a pas fonctionné: $ (fonction () {...}) mais, jQuery (fonction ($) {...}) travaillé. Les gens disent que $ est un alias de jQuery mais, l'alias n'a pas fonctionné.


C'est à cause de la manière dont vous avez peut-être configuré votre jQuery dans un paramètre NOCONFLICT . Ce n'est pas parce que vous ne comprenez pas les bases de la façon dont quelque chose fonctionne, vous ne pouvez pas faire le tour des réponses -1.


Ce n'est pas à propos de moi. Ceci est à propos de WordPress. Donc, comme vous l'avez dit, un utilisateur peut avoir configuré sa jQuery dans un paramètre NOCONFLICT de sorte que [peut-être] c'est le cas de WordPress. Donc, généralement, votre code donne la $ n'est pas une erreur dans WordPress.



-2
votes
    <script type="text/javascript">                 
 (function () { // 1) remove the "$"
   $(".comment_switch").click(function () { // 2) add "." if this a class or "#" // if it is an id
    $(".comments").toggleClass("hidden");
  });
});
</script> 

1 commentaires

Veuillez ajouter une description de la solution que vous proposez.