$ nu este definit folosind jQuery în WordPress

14 oct. 2010, 18:27:21
Vizualizări: 53K
Voturi: 38

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

0
Toate răspunsurile la întrebare 3
3
51

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.

14 oct. 2010 18:38:33
Comentarii

Ah, înțeleg. Eu obișnuiam să-l adaug manual, ceea ce explică de ce nu am întâlnit această problemă.

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

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 eselk
15 ian. 2015 20:08:33

Răspuns foarte util.

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

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.

14 oct. 2010 18:41:38
Comentarii

+1: Asta este mai ușor de citit decât să pui jQuery la sfârșit.

fuxia fuxia
14 oct. 2010 20:42:45

...dar nu este modul standard de a face o funcție anonimă. http://forum.jquery.com/topic/jquery-anonymous-function-calls

BryanH BryanH
15 oct. 2010 02:55:29

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 EAMann
15 oct. 2010 04:39:10

+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 bueltge
15 oct. 2010 15:46:46
0

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.

10 oct. 2013 02:18:45