$ no definido usando jQuery en WordPress

14 oct 2010, 18:27:21
Vistas: 53K
Votos: 38

Sé que jQuery está cargado, porque puedo cambiar el $ por 'jQuery' y todo funciona como se espera, pero este será un script desordenado si no puedo arreglar esto

Este script:

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 script:

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

funciona bien.

0
Todas las respuestas a la pregunta 3
3
51

Puedes envolver tu código JavaScript dentro de una función autoinvocada, luego pasar jQuery como argumento, usando $ como nombre de 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 como se espera.

Si recuerdo correctamente, la versión de jQuery suministrada por WordPress (la que obtienes al usar wp_enqueue_script('jquery')) coloca jQuery en modo no-conflicto inmediatamente, lo que hace que $ quede sin definir.

14 oct 2010 18:38:33
Comentarios

Ah, ya veo. Solía agregarlo manualmente, lo que explica por qué no me había encontrado con este problema.

Mild Fuzz Mild Fuzz
14 oct 2010 18:46:28

Gracias, estaba usando el formato alternativo con jQuery al principio en lugar de al final... pero no podía averiguar cómo devolver un valor, con este formato simplemente agregué return antes de la función autoinvocada, y funciona.

eselk eselk
15 ene 2015 20:08:33

Respuesta muy útil.

MarkSkayff MarkSkayff
1 nov 2017 22:04:41
4
32

¡Ya casi lo tienes!

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

});

Debes pasar una referencia a jQuery como la función $ dentro de tu método o no funcionará. Si simplemente colocas un $ dentro de la primera llamada function() como hice arriba, las cosas funcionarán correctamente.

14 oct 2010 18:41:38
Comentarios

+1: Eso es más legible que poner jQuery al final.

fuxia fuxia
14 oct 2010 20:42:45

...pero no es la forma estándar de hacer una función anónima. http://forum.jquery.com/topic/jquery-anonymous-function-calls

BryanH BryanH
15 oct 2010 02:55:29

Sí y no. Ambas se consideran formas "estándar" de hacerlo. Una crea una clase singleton que tiene $ definido localmente. La otra simplemente define un manejador para el evento ready del documento y pasa el objeto jQuery al manejador como $. Si estás intentando engancharte al evento ready, el segundo método es más ampliamente usado. Si necesitas jQuery para cualquier otro propósito (para engancharte a $.browser por ejemplo), usarías una clase singleton.

EAMann EAMann
15 oct 2010 04:39:10

+1 por jQuery(document).ready(function($){... para más información sobre jQuery y WordPress también puedes leer en mi post: http://wpengineer.com/2028/small-tips-using-wordpress-and-jquery/ .

bueltge bueltge
15 oct 2010 15:46:46
0

Pasar una función a jQuery es una forma abreviada de $(document).ready(...). Luego, al colocar $ como el primer parámetro de tu callback, creas un alias para jQuery dentro de ese callback:

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

Puedes ver la documentación para esto aquí.

10 oct 2013 02:18:45