$ non definito usando jQuery in WordPress


32

So che jQuery è caricato, perché posso cambiare $per 'jQuery' e tutto si comporta come previsto, ma questo sarà uno script disordinato se non posso risolvere questo

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

Risposte:


42

Puoi avvolgere il tuo javascript all'interno di una funzione auto-invocante, quindi passarci jQuerycome argomento, usando $come nome della variabile locale. Per 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 correttamente la versione di jQuery fornita da WP (quella che ottieni se tu wp_enqueue_script('jquery')) mette immediatamente in conflitto jQuery, causando $una definizione indefinita.


aah, capisco. Lo aggiungevo a mano, il che spiega perché non ho riscontrato questo problema.
Lieve Fuzz,

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

Risposta molto utile
MarkSkayff,

32

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 nel tuo metodo o non funzionerà. Se inserisci solo $ nella prima function()chiamata come ho fatto sopra, le cose funzioneranno bene.


4
+1: è più leggibile che mettere jQueryalla fine.
fuxia

1
... ma non è il modo standard di svolgere una funzione anonima. forum.jquery.com/topic/jquery-anonymous-function-calls
BryanH

5
Sì e no. Entrambi sono considerati modi "standard" per farlo. Uno crea una classe singleton che è stata $definita localmente. L'altro definisce semplicemente un gestore per l' readyevento del documento e passa l'oggetto jQuery nel gestore come $. Se stai cercando di agganciarti readyall'evento, il secondo metodo è più ampiamente usato. Se hai bisogno di jQuery per qualsiasi altro scopo (da agganciare ad $.browseresempio), useresti una classe singleton.
EAMann,

+1 per jQuery (documento) .ready (funzione ($) {... altre informazioni su jquery e WordPress puoi anche leggere sul mio post: wpengineer.com/2028/small-tips-using-wordpress-and-jquery .
bueltge

6

Passare una funzione a jQuery è una scorciatoia per $(document).ready(...)poi posizionandosi $come primo parametro del callback, si crea un alias per jQuery all'interno di quel callback:

jQuery(function($) {
    $("ul.vimeo_desc_feed li a").click(function(){
        alert($(this).attr('href'));
        return false;
    });
});

Puoi vedere la documentazione per questo qui .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.