$ nu este definit folosind jQuery în WordPress
Știu că jQuery este încărcat, deoarece pot înlocui $ cu 'jQuery' și totul funcționează conform așteptărilor, dar acest script va fi dezordonat dacă nu pot rezolva această problemă
Acest script:
jQuery(document).ready(function(){
$("ul.vimeo_desc_feed li a").click(function(){
alert($(this).attr('href'));
return false;
})
});
Generează eroarea $ is not a function
Acest script:
jQuery(document).ready(function(){
jQuery("ul.vimeo_desc_feed li a").click(function(){
alert(jQuery(this).attr('href'));
return false;
})
});
funcționează corect.
Poți încadra codul tău JavaScript într-o funcție auto-invocatoare, apoi să transmiți jQuery ca argument acesteia, folosind $ ca nume de variabilă locală. De exemplu:
(function($) {
$(document).ready(function(){
$("ul.vimeo_desc_feed li a").click(function(){
alert($(this).attr('href'));
return false;
})
});
}(jQuery));
ar trebui să funcționeze conform așteptărilor.
Dacă îmi amintesc corect, versiunea de jQuery furnizată de WordPress (cea pe care o obții cu wp_enqueue_script('jquery')) activează modul no-conflict imediat, ceea ce face ca $ să fie nedefinit.
Ah, înțeleg. Eu obișnuiam să-l adaug manual, ceea ce explică de ce nu am întâlnit această problemă.
Mild Fuzz
Mulțumesc, foloseam formatul alternativ cu jQuery la început în loc de sfârșit... dar nu-mi puteam da seama cum să returnez o valoare. Cu acest format, am adăugat pur și simplu return înaintea funcției auto-invocative și funcționează.
eselk
Ești aproape gata!
jQuery(document).ready(function($){
$("ul.vimeo_desc_feed li a").click(function(){
alert($(this).attr('href'));
return false;
})
});
Trebuie să transmiți o referință la jQuery ca funcție $ în metoda ta, altfel nu va funcționa. Dacă pur și simplu plasezi un $ în interiorul primului apel function() așa cum am făcut mai sus, lucrurile vor funcționa perfect.
...dar nu este modul standard de a face o funcție anonimă. http://forum.jquery.com/topic/jquery-anonymous-function-calls
BryanH
Da și nu. Ambele sunt considerate metode "standard" de a face acest lucru. Una creează o clasă singleton care are $ definit local. Cealaltă doar definește un handler pentru evenimentul ready al documentului și trece obiectul jQuery în handler ca $. Dacă încerci să te conectezi la evenimentul ready, a doua metodă este mai folosită. Dacă ai nevoie de jQuery pentru orice alt scop (de exemplu, pentru a te conecta la $.browser), ai folosi o clasă singleton.
EAMann
+1 pentru jQuery(document).ready(function($){... mai multe informații despre jQuery și WordPress le poți citi și în articolul meu: http://wpengineer.com/2028/small-tips-using-wordpress-and-jquery/ .
bueltge
Transmiterea unei funcții către jQuery este o prescurtare pentru $(document).ready(...), apoi prin plasarea $ ca prim parametru al funcției tale de callback, creezi un alias pentru jQuery în cadrul acelui callback:
jQuery(function($) {
$("ul.vimeo_desc_feed li a").click(function(){
alert($(this).attr('href'));
return false;
});
});
Puteți consulta documentația pentru aceasta aici.