$ no definido usando jQuery en WordPress

32

Sé que jQuery está cargado, porque puedo cambiarlo $por 'jQuery' y todo se comporta como se esperaba, pero este será un script desordenado si no puedo solucionarlo

Este guión:

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

Produce el error $ is not a function

Este guión:

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

funciona bien.

Fuzz suave
fuente

Respuestas:

42

Puede envolver su javascript dentro de una función de auto-invocación, luego pasarlo jQuerycomo argumento, utilizando $como el nombre de la variable local. Por ejemplo:

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

debería funcionar según lo previsto.

Si recuerdo correctamente, la versión de jQuery suministrada por WP (la que obtienes si lo haces wp_enqueue_script('jquery')) pone a jQuery en no conflicto inmediatamente, lo $que hace que no esté definida.

nadie
fuente
aah, ya veo. Solía ​​agregarlo a mano, lo que explica por qué no me he encontrado con este problema.
Mild Fuzz
Gracias, estaba usando el formato alternativo con jQuery al principio en lugar de al final ... pero no pude encontrar la forma de devolver un valor, con este formato simplemente agregué return antes de la función de invocación automática y funciona.
eselk
Muy útil respuesta.
MarkSkayff
32

¡Ya casi estás ahí!

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

});

Debe pasar una referencia a jQuery como la $función en su método o no funcionará. Si coloca un $ dentro de la primera function()llamada como lo hice anteriormente, las cosas funcionarán bien.

EAMann
fuente
44
+1: Eso es más legible que poner jQueryal final.
fuxia
1
... pero no es la forma estándar de hacer una función anónima. forum.jquery.com/topic/jquery-anonymous-function-calls
BryanH
55
Si y no. Ambos se consideran formas "estándar" de hacerlo. Uno crea una clase singleton que se ha $definido localmente. El otro simplemente define un controlador para el readyevento del documento y pasa el objeto jQuery al controlador como $. Si está tratando de conectarse al readyevento, el segundo método se usa más ampliamente. Si necesita jQuery para cualquier otro propósito (para conectarse, $.browserpor ejemplo), usaría una clase singleton.
EAMann
+1 para jQuery (document) .ready (function ($) {... más información sobre jquery y WordPress también puede leer en mi publicación: wpengineer.com/2028/small-tips-using-wordpress-and-jquery .
bueltge
6

Pasar una función a jQuery es una abreviatura para $(document).ready(...)luego colocarlo $como el primer parámetro de su devolución de llamada, crear un alias para jQuery dentro de esa devolución de llamada:

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

Puede ver la documentación para esto aquí .

Rohmann
fuente