$ 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.
Mild Fuzz
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.
eselk
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
BryanH
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.
EAMann
+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/ .
bueltge
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.