$ 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.

Fuzz leve
fonte

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.

ninguém
fonte
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.

EAMann
fonte
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 .

rohmann
fonte