$ no definido usando jQuery en WordPress
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.

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.

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

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.

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

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

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.

+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/ .

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