TypeError: $ non è una funzione quando si chiama la funzione jQuery


214

Ho un semplice script jQuery in un plug-in di WordPress che utilizza un wrapper jQuery come questo:

$(document).ready(function(){

    // jQuery code is in here

});

Sto chiamando questo script dalla dashboard di WordPress e lo sto caricando DOPO aver caricato il framework jQuery.

Quando controllo la pagina in Firebug, continuo a ricevere il messaggio di errore:

TypeError: $ non è una funzione

$ (Document) .ready (function () {

Dovrei forse avvolgere lo script in questa funzione:

(function($){

    // jQuery code is in here

})(jQuery);

Ho avuto questo errore parecchie volte e non sono sicuro di come gestirlo.

Qualsiasi aiuto sarebbe molto apprezzato.


3
Se digiti $console e premi invio, cosa vedi?
zerkms,

Quando eseguo $ in console ricevo "undefined"
Jason

Risposte:


321

Di default quando accodate jQuery in Wordpress è necessario utilizzare jQuerye $non viene utilizzato (questo è per compatibilità con altre librerie).

La tua soluzione per functionincluderlo funzionerà bene, oppure puoi caricare jQuery in un altro modo (ma probabilmente non è una buona idea in Wordpress).

Se è necessario utilizzare document.ready, è possibile passare effettivamente $alla chiamata di funzione:

jQuery(function ($) { ...

Ho provato la seconda versione, ma non ha funzionato, la prima ha funzionato, ma voglio solo assicurarmi di non raddoppiare la chiamata a jQuery.
Jason,

@Jason non ne hai nemmeno bisogno; esattamente quello che ho pubblicato: jsfiddle.net/vcbYJ
Explosion Pills


E se qualche selettore è fuori jQuery(function ($) { ..., devi usare jQueryinvece di$
Misha Rudrastyh,

Grazie fratello Lo
apprezzo

154

Questo dovrebbe risolverlo:

jQuery(document).ready(function($){
  //you can now use $ as your jQuery object.
  var body = $( 'body' );
});

In parole povere, WordPress esegue i propri script prima che tu possa e rilasciano $var in modo che non si scontrino con altre librerie. Ciò ha perfettamente senso, poiché WordPress viene utilizzato per tutti i tipi di siti Web, app e, naturalmente, blog.

Dalla loro documentazione:

La libreria jQuery inclusa in WordPress è impostata sulla modalità noConflict () (consultare wp-Includes / js / jquery / jquery.js). Questo per evitare problemi di compatibilità con altre librerie JavaScript che WordPress può collegare.

Nella modalità noConflict (), il collegamento $ globale per jQuery non è disponibile ...


28

Questa soluzione ha funzionato per me

;(function($){
    // your code
})(jQuery);

Sposta il codice all'interno della chiusura e usa $invece dijQuery

Ho trovato la soluzione sopra in /magento/33348/uncaught-typeerror-undefined-is-not-a-function-when-using-a-jquery-plugin-in-ma

... dopo aver cercato troppo


2
Soluzione fantastica. Il motivo principale per cui funziona è che ";" chiude qualsiasi altra istanza di jquery già attiva e allo stesso tempo ne dichiara un'altra nuova localmente. Quando hai solo pochi secondi per implementare un layout in produzione o un sacco di plugin wordpress in esecuzione, puoi farlo alla grande. Ma tieni presente che devi risolvere il problema, questo è solo un cerotto, ma se si tratta di una pagina di informazioni va bene.
luis,

@Martha James Questo funziona per me, quindi incluso. Potrebbe o non potrebbe funzionare per gli altri
Bikram Shrestha,

19

Puoi evitare conflitti come questo

var jq=jQuery.noConflict();
jq(document).ready(function(){  
  alert("Hi this will not conflict now");
  jq('selector').show();
});

7
Oppure $ = jQuery.noConflict ();
Cyssoo,


13

Prova questo:

<script language="JavaScript" type="text/javascript" src="jquery/jquery.js"></script>
<script>
    jQuery.noConflict();
    (function ($) {
        function readyFn() {
            // Set your code here!!
        }

        $(document).ready(readyFn); 
    })(jQuery);

</script>

8

Devi passare $ in function ()

<script>
jQuery(document).ready(function($){

// jQuery code is in here

});
</script>

3
In che modo questo differisce dalla risposta fornita sopra (rispetto a tre anni prima)?
rnevius,

8

sostituire il $segno in jQuery questo modo:

jQuery(function(){
//your code here
});

7

Controlla nuovamente i tuoi riferimenti jQuery. È possibile che tu faccia riferimento a più di una volta o chiami la tua funzione troppo presto (prima che jQuery sia definito). Puoi provare come menzionato nei miei commenti e inserire qualsiasi riferimento jQuery nella parte superiore del tuo file (nella testa) e vedere se questo aiuta.

Se usi l'incapsulamento di jQuery, in questo caso non dovrebbe essere d'aiuto. Per favore, provalo perché penso che sia più bello e più ovvio, ma se jQuery non è definito otterrai gli stessi errori.

Alla fine ... jQuery non è attualmente definito.


Penso che piuttosto che qualcosa tenti di accedere a JQuery prima che venga definito che a sua volta rompe tutto. Prova a spostare i tuoi scriptriferimenti JQueryin cima ai tuoi index.htmle probabilmente funzionerà
Dan Moldovan

Questa risposta richiede maggiore visibilità. Sì, gli altri sono validi se lo spazio dei nomi standard è preso con una versione di jQuery caricata tramite qualche altro plugin. Ma controlla di non caricare inavvertitamente (e forse inutilmente) il caricamento di jQuery più di una volta.
edkay,


5

Uso

jQuery(document).

invece di

$(document).

o

All'interno della funzione, $ punta a jQuery come ci si aspetterebbe

(function ($) {
   $(document).
}(jQuery));

4

Cosa ha funzionato per me. La prima libreria da importare è la libreria di query e quindi chiama il metodo jQuery.noConflict ().

<head>
 <script type="text/javascript" src="jquery.min.js"/>
 <script>
  var jq = jQuery.noConflict();
  jq(document).ready(function(){
  //.... your code here
    });
 </script>


3
<script>
var jq=jQuery.noConflict();
(function ($) 
    {
    function nameoffunction()
    {
        // Set your code here!!
    }

    $(document).ready(readyFn); 
    })(jQuery);

ora usa jq al posto di jQuery


3

Si riscontra questo problema quando il nome della funzione e uno dei nomi ID nel file sono uguali. assicurati solo che tutti i tuoi nomi ID nel file siano univoci.


2

Puoi usare

jQuery(document).read(function(){ ... });

o

(function ($) { ... }(jQuery));
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.