TypeError: 'undefined' non è una funzione (valutazione '$ (documento)')


139
  1. Sto usando un sito WordPress.
  2. Sto includendo questo script nell'intestazione.

Quando lo script viene caricato, viene visualizzato questo errore:

TypeError: 'undefined' non è una funzione (valutazione '$ (documento)')

Non ho idea di cosa lo stia causando o cosa significhi.

In firebug, ottengo questo:

$ non è una funzione


4
Assicurati di includere la libreria jQuery prima dello script personalizzato e che non ci siano errori nella Netscheda di Firebug (assicurati che jQuery venga effettivamente caricato).
wsanville,

... sì, ovviamente jQuery si sta caricando prima. Sono abbastanza sicuro che sia un problema enque di WordPress.
dcolumbus,

Risposte:


239

Wordpress utilizza jQuery in modalità noConflict per impostazione predefinita. È necessario fare riferimento utilizzando jQuerycome nome della variabile, non $, ad esempio, utilizzare

jQuery(document);

invece di

$(document);

Puoi facilmente racchiuderlo in una funzione di auto-esecuzione in modo che faccia $nuovamente riferimento a jQuery (ed eviti di inquinare anche lo spazio dei nomi globale), ad es.

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

5
La sceneggiatura non è necessaria; puoi semplicemente chiamare jQuery(document)invece di $(document)dove vuoi. Se invece si desidera utilizzare $, lo script precedente crea semplicemente una funzione che accetta un argomento e $quindi lo esegue passando jQuery; in breve, all'interno della funzione, $punta a jQuery come ci si aspetterebbe.
El Yobo,

2
In realtà, quello che ho fatto è stato mettere la mia normalità $(document).ready(function() { // code });al posto del tuo $(document);... che ha funzionato come un incantesimo.
dcolumbus,

1
Sì, è quello che stavo suggerendo: "all'interno della funzione, $ punta a jQuery come ti aspetteresti".
El Yobo,

Bene, ti fa risparmiare un paio di caratteri in questo modo :) Maggiori dettagli sulla forma ! Function () {} () di istruzione auto-eseguita .
El Yobo,

So che è vecchio @ElYobo, ma penso che potresti modificare il tuo post e aggiungere il tuo esempio dal tuo primo commento alla risposta come secondo esempio. Grazie per avermi risparmiato tempo =)
Manatax

25

Usa jQuery noConflict. Ha fatto meraviglie per me

var example=jQuery.noConflict();
example(function(){
example('div#rift_connect').click(function(){
    example('span#resultado').text("Hello, dude!");
    });
});

Cioè, supponendo che tu abbia incluso jQuery nel tuo HTML

<script language="javascript" type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>


11

Prova questo frammento:

jQuery(function($) {
  // Your code.
})

Ha funzionato per me, forse aiuterà anche te.


11

Ho avuto questo problema solo su Chrome.

Ho provato ad aggiungere

var $ =jQuery.noConflict();

appena prima di chiamare

$(document).ready(function () {

Ha funzionato.

molte grazie


Grazie per questo Sapevo di poter risolvere il problema usando "jQuery" invece di "$", ma il mio problema era che si interrompeva la modifica di Komodo quando scritto in quel modo, quindi dovevo scegliere tra ottenere il suggerimento / completamento del codice su $ o far funzionare il mio JavaScript. Questo metodo mi consente di avere entrambi.
George Kendros,

6

Controlla anche l'inclusione di jQuery, seguita da alcuni componenti / altre librerie (come l'interfaccia utente di jQuery) e poi includendo accidentalmente di nuovo jQuery - questo ridefinirà jQuery e eliminerà gli helper dei componenti (come .datepicker) dall'istanza.


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

Inserisci il tuo codice js nella chiusura sopra, dovrebbe risolvere il problema.


4

Vorrei usare questo

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

2

Ho anche affrontato tali problemi molte volte nel vettore di sviluppo web. In realtà non è un conflitto JS, quando cariciamo un sito Web html sul browser non riscontriamo questo errore, ma quando cariciamo questo tipo di sito Web tramite localhost affrontiamo tale problema. Questo a causa di localhost. Quando cariciamo gli script tramite localhost, questo esegue la scansione dello script e esegue il rendering dell'output. Ma quando non abbiamo usato localhost. Esegue semplicemente la scansione dell'output. Esempio, quando scriviamo codice php a fianco dell'host locale ed eseguiamo senza host otteniamo un errore. Ma se il codice è corretto e viene eseguito attraverso l'host otteniamo l'output effettivo e quando utilizziamo inspect element otteniamo il codice di output in formato HTMl ma non in formato PHP, ciò è dovuto al rendering del codice.

Questo è un errore di rendering. Quindi, per correggere questi errori del codice jquery, una delle soluzioni potrebbe utilizzare questo metodo.

jQuery(document).ready(function($){
/******** Body of Jquery Code*****/
});

Quello che fa questo codice è registrare '$' come variabile della funzione applicando jquery. Altrimenti per impostazione predefinita il file .js viene letto solo come javascript.


1

Ho riscontrato questo problema anche quando ho incluso jQuery nell'intestazione della mia pagina, senza rendermi conto che l'host lo stava già includendo automaticamente nella pagina. Quindi carica la tua pagina in tempo reale e controlla l'origine per vedere se jQuery è collegato.


1

Due cose:

  1. Assicurati di aver aggiunto la libreria jQuery, prima di $ (documento).
  2. Quindi cambia tutti i "$" con: jQuery, come i commenti precedenti.

1

avvolgi tutto lo script tra questo ...

<script>
    $.noConflict();
    jQuery( document ).ready(function( $ ) {
      // Code that uses jQuery's $ can follow here.
    });
</script>

Molte librerie JavaScript usano $ come funzione o nome di variabile, proprio come fa jQuery. Nel caso di jQuery, $ è solo un alias per jQuery, quindi tutte le funzionalità sono disponibili senza usare $. Se è necessario utilizzare un'altra libreria JavaScript insieme a jQuery, restituire il controllo di $ back all'altra libreria con una chiamata a $ .noConflict () . I vecchi riferimenti di $ vengono salvati durante l'inizializzazione di jQuery; noConflict () li ripristina semplicemente.


1

Puoi usare sia jQuery che $ nello snippet di seguito. ha funzionato per me

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

1

Puoi passare $ in function ()

jQuery(document).ready(function($){

// jQuery code is in here

});

oppure puoi sostituirlo $(document);con questojQuery(document);

oppure puoi usare jQuery.noConflict()

var jq=jQuery.noConflict();
jq(document).ready(function(){  
  jq('selector').show();
});
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.