web-dev-qa-db-fra.com

$ non défini avec jQuery dans WordPress

Je sais que jQuery est chargé, car je peux désactiver le $ pour 'jQuery' et tout se comporte comme prévu, mais ce sera un script compliqué si je ne parviens pas à résoudre ce problème.

Ce script:

jQuery(document).ready(function(){
    $("ul.vimeo_desc_feed li a").click(function(){
        alert($(this).attr('href'));
        return false;
    })
});

Produit l'erreur$ is not a function

Ce script:

jQuery(document).ready(function(){
    jQuery("ul.vimeo_desc_feed li a").click(function(){
        alert(jQuery(this).attr('href'));
        return false;
    })
});

fonctionne bien.

32
Mild Fuzz

Vous pouvez envelopper votre code javascript dans une fonction à invocation automatique, puis passer jQuery en argument, en utilisant $ comme nom de variable locale. Par exemple:

(function($) {
  $(document).ready(function(){
    $("ul.vimeo_desc_feed li a").click(function(){
      alert($(this).attr('href'));
      return false;
    })
 });
}(jQuery));

devrait fonctionner comme prévu.

Si je me souviens bien de la version de jQuery fournie par WP (celle que vous obtiendrez si vous avez wp_enqueue_script('jquery')), jQuery est immédiatement en mode non-conflit, ce qui a pour effet que $ n'est pas défini.

41
nobody

Tu y es presque!

jQuery(document).ready(function($){
    $("ul.vimeo_desc_feed li a").click(function(){
        alert($(this).attr('href'));
        return false;
    })

});

Vous devez passer une référence à jQuery en tant que fonction $ dans votre méthode, sinon cela ne fonctionnera pas. Si vous placez simplement un $ dans le premier appel function() comme je l’ai fait ci-dessus, tout se passera bien.

31
EAMann

Passer une fonction à jQuery est un raccourci pour $(document).ready(...), puis en plaçant $ en tant que premier paramètre de votre rappel, vous créez un alias pour jQuery dans ce rappel:

jQuery(function($) {
    $("ul.vimeo_desc_feed li a").click(function(){
        alert($(this).attr('href'));
        return false;
    });
});

Vous pouvez voir la documentation pour ceci ici .

6
rohmann