$ non definito utilizzando jQuery in WordPress
So che jQuery è caricato, perché posso sostituire il $
con 'jQuery' e tutto funziona come previsto, ma questo script diventerà disordinato se non riesco a risolvere questo problema
Questo script:
jQuery(document).ready(function(){
$("ul.vimeo_desc_feed li a").click(function(){
alert($(this).attr('href'));
return false;
})
});
Produce l'errore $ is not a function
Questo script:
jQuery(document).ready(function(){
jQuery("ul.vimeo_desc_feed li a").click(function(){
alert(jQuery(this).attr('href'));
return false;
})
});
funziona correttamente.

Puoi racchiudere il tuo codice JavaScript all'interno di una funzione auto-invocante, passando poi jQuery
come argomento, utilizzando $
come nome della variabile locale. Ad esempio:
(function($) {
$(document).ready(function(){
$("ul.vimeo_desc_feed li a").click(function(){
alert($(this).attr('href'));
return false;
})
});
}(jQuery));
dovrebbe funzionare come previsto.
Se ricordo bene, la versione di jQuery fornita da WordPress (quella che ottieni con wp_enqueue_script('jquery')
) imposta immediatamente jQuery in modalità no-conflict, causando la non definizione di $
.

Ah, capisco. Io lo aggiungevo manualmente, il che spiega perché non mi sono mai imbattuto in questo problema.

Grazie, stavo usando il formato alternativo con jQuery all'inizio invece che alla fine... ma non riuscivo a capire come restituire un valore, con questo formato ho semplicemente aggiunto return prima della funzione auto-invocante, e funziona.

Ci sei quasi!
jQuery(document).ready(function($){
$("ul.vimeo_desc_feed li a").click(function(){
alert($(this).attr('href'));
return false;
})
});
Devi passare un riferimento a jQuery come funzione $
al tuo metodo altrimenti non funzionerà. Se inserisci semplicemente un $ all'interno della prima chiamata function()
come ho fatto sopra, tutto funzionerà correttamente.

...ma non è il modo standard di fare una funzione anonima. http://forum.jquery.com/topic/jquery-anonymous-function-calls

Sì e no. Entrambi sono considerati modi "standard" per farlo. Uno crea una classe singleton che ha $
definito localmente. L'altro definisce semplicemente un gestore per l'evento ready
del documento e passa l'oggetto jQuery al gestore come $
. Se stai cercando di agganciarti all'evento ready
, il secondo metodo è più utilizzato. Se hai bisogno di jQuery per qualsiasi altro scopo (ad esempio per accedere a $.browser
), useresti una classe singleton.

+1 per jQuery(document).ready(function($){... per maggiori informazioni su jQuery e WordPress puoi anche leggere il mio post: http://wpengineer.com/2028/small-tips-using-wordpress-and-jquery/ .

Passare una funzione a jQuery è una forma abbreviata per $(document).ready(...)
. Quindi, posizionando $
come primo parametro della tua callback, crei un alias per jQuery all'interno di quella callback:
jQuery(function($) {
$("ul.vimeo_desc_feed li a").click(function(){
alert($(this).attr('href'));
return false;
});
});
Puoi consultare la documentazione per questo qui.
