$ não definido usando jQuery no WordPress


32

Eu sei que o jQuery está carregado, porque eu posso mudar o $for 'jQuery' e tudo se comporta conforme o esperado, mas esse será um script confuso se eu não conseguir corrigir isso

Este script:

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

Produz o erro $ is not a function

Este script:

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

funciona bem.

Respostas:


42

Você pode agrupar seu javascript dentro de uma função auto-invocável e passar jQuerycomo argumento a ela, usando $como o nome da variável local. Por exemplo:

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

deve funcionar como pretendido.

Se bem me lembro, a versão do jQuery fornecida pelo WP (a que você obtém se wp_enqueue_script('jquery')) coloca o jQuery imediatamente sem conflito, causando $indefinição.


aah, entendo. Eu costumava adicioná-lo manualmente, o que explica por que não encontrei esse problema.
Mild Fuzz

Obrigado, eu estava usando o formato alternativo com jQuery no início, em vez de no final .. mas não consegui descobrir como retornar um valor, com esse formato acabei de adicionar return antes da função de auto-chamada e funciona.
eselk

Resposta muito útil.
MarkSkayff #

32

Você está quase lá!

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

});

Você precisa passar uma referência ao jQuery como a $função para o seu método ou ele não funcionará. Se você colocar $ na primeira function()chamada, como fiz acima, as coisas estarão funcionando bem.


4
+1: Isso é mais legível do que colocar jQueryno final.
fuxia

1
... mas não é a maneira padrão de executar uma função anônima. forum.jquery.com/topic/jquery-anonymous-function-calls
BryanH

5
Sim e não. Ambos são considerados maneiras "padrão" de fazê-lo. Um cria uma classe singleton que $definiu localmente. O outro apenas define um manipulador para o readyevento do documento e passa o objeto jQuery para o manipulador como $. Se você está tentando se conectar ao readyevento, o segundo método é mais amplamente usado. Se você precisar do jQuery para qualquer outro propósito (para conectar, $.browserpor exemplo), você usaria uma classe singleton.
EAMann

+1 para jQuery (documento) .ready (function ($) {... mais informações sobre jquery e WordPress, você também pode ler no meu post: wpengineer.com/2028/small-tips-using-wordpress-and-jquery .
bueltge

6

Passar uma função para o jQuery é uma abreviação $(document).ready(...)e, ao colocar $como o primeiro parâmetro do seu retorno de chamada, você cria um alias para o jQuery nesse retorno de chamada:

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

Você pode ver a documentação para isso aqui .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.