Errore di riferimento non rilevato: $ non è definito?


658

Come mai questo codice genera un

Errore di riferimento non rilevato: $ non è definito

quando era OK prima?

$(document).ready(function() {
    $('#tabs > ul').tabs({ fx: { opacity: 'toggle' } });
    $('#featuredvid > ul').tabs();
});

I risultati nelle schede non si chiudono più.

jQuery è indicato nell'intestazione:

<script language="JavaScript" type="text/javascript" src="<?php echo get_option('siteurl') ?>/js/sprinkle.js"></script>
<script language="JavaScript" type="text/javascript" src="<?php echo get_option('siteurl') ?>/js/jquery-1.2.6.min.js"></script>
<script language="JavaScript" type="text/javascript" src="<?php echo get_option('siteurl') ?>/js/jquery-ui-personalized-1.5.2.packed.js"></script>

<script language = "JavaScript" type = "text / javascript" src = "<? php echo get_option ('siteurl')?> / js / jquery-1.2.6.min.js"> </script> Accetta questo top
captainsac

Nel mio caso, JQuery era nella sezione piè di pagina, quindi la funzione JS è stata chiamata per prima.
Daniel Beltrami,

Questo risponde alla tua domanda? Errore di riferimento: $ non è definito
Brynn

Risposte:


689

Dovresti inserire prima i riferimenti agli script jquery.

<script language="JavaScript" type="text/javascript" src="/js/jquery-1.2.6.min.js"></script>
<script language="JavaScript" type="text/javascript" src="/js/jquery-ui-personalized-1.5.2.packed.js"></script>
<script language="JavaScript" type="text/javascript" src="/js/sprinkle.js"></script>

27
Giusto per essere sicuri che questo sia chiaro: non puoi mettere il riferimento allo script a jquery-ui prima dello script jquery stesso. Questo è ciò che mi ha risolto il problema: prima jquery-xxxmin.js, poi jquery-ui-xxxxxx.js.
Wagner da Silva,

26
2 anni dopo, la risposta non è ancora "spuntata") In questo articolo vengono descritti questo e altri 4 casi più comuni quando si verifica questo errore.
Uzbekjon,

2
@Uzbekjon Questo mi ha risolto. Il percorso dello script era errato in uno dei miei HTMLfile.
Adam Jensen,

@Jeremy, grazie mille. Mettilo anche prima di qualsiasi vista parziale (mvc) in modo che sia disponibile per qualsiasi script nel parziale.
Andrew Day

1
@Uzbekjon da quasi 10 anni e non è ancora spuntato. Grazie per aver fornito il link all'articolo.
Modo

235

Stai chiamando la funzione ready prima di includere jQuery JavaScript. Prima fai riferimento a jQuery.


30
@RamSharma In realtà, questa è la risposta giusta. Non hai bisogno di nient'altro per risolvere il problema.
Derek 朕 會 功夫

Sì. Questo era il mio problema Ho semplicemente avuto jquery DOPO aver fatto riferimento al mio file js. D'oh!
dogonaroof

Nel mio caso ho dovuto rimuovere il differimento chiave da <script src = "/ js / jquery-1.2.6.min.js" differire> </script>
Charden Daxicen

123

Questo è ciò che ha risolto per me. Inizialmente sono andato su Google e ho copiato e incollato il frammento suggerito per jQuery sulla loro pagina CDN:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

Lo snippet non include HTTP:o HTTPS:nel filesrc dell'attributo ma il browser, FireFox, aveva bisogno quindi l'ho cambiato in: edit: questo ha lavorato per me con Google Chrome, nonché

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

Quindi ha funzionato.


13
A rigor di termini lo snippet / esempio di Google è corretto - il loro attributo src è un protocollo meno URL, il che significa che il browser dovrebbe usare il protocollo (HTTP / HTTPS) della pagina chiamante. Vedi paulirish.com/2010/the-protocol-relative-url . Questa è la migliore pratica per evitare avvisi di contenuto misto se la tua pagina viene mai pubblicata su SSL e gli script non lo sono.
pwdst,

12
Un problema comune qui, probabilmente, è quando gli URL relativi al protocollo vengono utilizzati durante lo sviluppo e in una giornata di sole si tenta di caricare una pagina da un file locale. Il tuo browser proverà in modo ottimale a caricare file://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.jse ti chiedi perché non viene visualizzato nella console di rete.
Pieter Ennes,

grazie @PieterEnnes, questo è stato esattamente il caso per me. Grazie anche a chi risponde!
jwg

43

Se lo script personalizzato viene caricato prima che il plug-in jQuery venga caricato nel browser, potrebbe verificarsi questo tipo di problema. Quindi, mantieni sempre il tuo codice JavaScript o jQuery dopo aver chiamato il plug-in jQuery, quindi la soluzione è:

Per prima cosa aggiungi il link al file jQuery ospitato su GoogleApis o un file jQuery locale che scaricherai da http://jquery.com/download/ e che ospiterai sul tuo server:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

o qualsiasi plugin per jQuery. Quindi inserisci il link o il codice del tuo file di script personalizzato:

<script src="js/custom.js" type="text/javascript"></script>

3
If your custom script is loaded before the jQuery plugin is loaded to the browser then this type of problem may occur la risposta perfetta .. nel mio caso la sceneggiatura era in fondo
echoashu,

41

Nel mio caso stavo mettendo il mio .jsfile prima del collegamento dello script jQuery, mettendo il .jsfile dopo che il collegamento dello script jQuery ha risolto il mio problema.

<script src="http://code.jquery.com/jquery-1.10.2.js"></script>
<script src="http://code.jquery.com/ui/1.11.2/jquery-ui.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="exponential.js"></script>

Ho usato questo per correggere il mio jschart.
indofraiser,

questo risolto il problema, il .js file dovrebbe essere inserito prima del collegamento dello script jQuery.
Il metodo scientifico

27

Ok, il mio problema era diverso: era il modello Document Security in Chrome .

Guardando le risposte qui, era ovvio che in qualche modo non stavo caricando i miei file jquery prima di chiamare le $(document).ready()funzioni ecc. Tuttavia, erano tutti nelle posizioni corrette.

Nel mio caso, ciò era dovuto al fatto che stavo accedendo al contenuto tramite una connessione HTTPS protetta, mentre la pagina stava cercando di scaricare i dati ospitati dalla CDN da Google, ecc. La soluzione era di archiviarli localmente e quindi includerli direttamente anziché anziché dal CDN ogni volta.

Modifica : L'altro modo per farlo è quello di collegarsi a tutte le cose ospitate dalla CDN come https: // piuttosto che http: // - quindi il modello non si lamenta.


5
Inoltre, tieni presente che puoi lasciare il protocollo fuori dai collegamenti e sceglierà quello appropriato a seconda del contesto (supponendo che esistano entrambe le versioni http e https). Vedi stackoverflow.com/a/3622615/4332
Adrian Mouat il

Sì. questo risolto il mio problema, stavo caricando gli script da un URL come questo ´ // cdnjs.cloudflare.com / ajax / libs / jquery / 1.12.0 / jquery.min.js´. L'uso di " cdnjs ..." funziona alla grande
user9869932

25

Aggiungi la libreria prima di avviare lo script. Puoi aggiungere uno di questi seguenti CDN per avviarlo.

Google:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

Microsoft

<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.2.1.min.js"></script>

jquery

Se vuoi qualsiasi altra versione cdn di Jquery controlla questo link .

Dopodichè:

<script type="text/javascript">
$(function(){
    //your stuff
});
or
$(document).ready(function(){
    //your stuff
});    
</script>

Wordpress:

<script type="text/javascript">
var $ = jQuery;
jQuery(document).ready(function($){
     //your stuff
});
</script>

19

Se è in wordpress, potrebbe essere necessario cambiare

$(document).ready(function() {

per

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

o aggiungi

var $ = jQuery;

prima

$(document).ready(function() {

19

Ho avuto lo stesso identico problema e nessuna di queste soluzioni ha aiutato. tuttavia, ho appena collegato i .cssfile dopo i .jsfile e il problema è miracolosamente scomparso. Spero che sia di aiuto.


13
Innanzitutto, per migliorare le prestazioni di rendering della pagina, devi sempre collegare i file CSS prima dei file JS. In secondo luogo, l'ordine dei file css e js non dovrebbe avere alcun effetto sull'attuale cituation.
Uzbekjon,

12
"Ciò che ha risolto il tuo problema non dovrebbe risolvere il tuo problema e non dovresti fare ciò che ha risolto il tuo problema."
Andrew,

15

Volevo provare a rendere il mio script asincrono . Poi me ne sono dimenticato e quando sono andato in diretta il file .js [personalizzato] ha caricato solo il 50% delle volte prima di jQuery.js.

Quindi sono cambiato

<script async src="js/script.js"></script>

per

<script src="js/script.js"></script>

14

Nel mio caso ho avuto questo riferimento Errore poiché l'ordine delle chiamate di script era sbagliato. Risolto cambiando l'ordine:

<script src="js/index.js"></script>
<script src="js/jquery-1.10.2.js"></script>

per

<script src="js/jquery-1.10.2.js"></script>
<script src="js/index.js"></script>

1
Principalmente questo è stato il problema che ho riscontrato anche quando si verifica un errore di riferimento per '$'
Dipak

9

Ho avuto lo stesso problema e ho risolto mettendo jQuery in cima a tutti i codici javascript che ho nel mio codice.

Qualcosa come questo:

<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
<script src="js/app.js" type="text/javascript"></script>
<script src="js/form.js" type="text/javascript"></script>
<script src="js/create.js" type="text/javascript"></script>
<script src="js/tween.js" type="text/javascript"></script>

La speranza può aiutare qualcuno in futuro.


8

Stai chiamando il ready() funzione prima di includere jQuery JavaScript. Prima fai riferimento a jQuery.

Se ti trovi in ​​ASP.NET MVC, puoi specificare quando eseguire il rendering del codice JS, procedendo nel modo seguente:

1, nel page.cshtmlavvolgere il <script>tag in una sezione e dargli un nome, il nome comune da usare è 'script':

@section scripts {
    <script>
        // JS code...
    </script>
}

2, nella tua _Layout.cshtmlpagina aggiungi @RenderSection("Scripts", required: false), assicurati di inserirlo dopo aver fatto riferimento alla fonte Jquery, questo renderà il tuo codice JS renderizzato più tardi rispetto a Jquery.


6

Se lo stai facendo in .Net e fai riferimento correttamente al file di script e jQuery sembra a posto, assicurati che i tuoi utenti abbiano accesso al file di script. Il progetto a cui stavo lavorando (un collega) aveva il loro web.config che negava l'accesso agli utenti anonimi. La pagina su cui stavo lavorando era accessibile agli utenti anonimi quindi non avevano accesso al file di script. È stato eliminato quanto segue in web.config e tutto andava bene nel mondo:

  <location path="Scripts">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>

6

Nel mio caso era un errore di battitura, ho dimenticato una barra rovesciata e riferivo la fonte in modo errato.

Prima src="/scripts/jquery.js"

Dopo    src="scripts/jquery.js"


5

Il file di origine jquery-1.2.6.min.jsnon è chiamato il comando jQuery $()viene eseguito prima di <..src='jquery-1.2.6.min.js'>.

Si prega di eseguire <.. src="/js/jquery-1.2.6.min.js..">inizialmente e assicurarsi che il percorso src sia corretto, quindi eseguire il comando jquery

$(document).ready(function() 

5

Questo mi è successo prima.

Il motivo è che sto collegando Android a una visualizzazione Web con un JS. E ho inviato un parametro senza virgolette.

js.sayHello(hello);

e quando l'ho cambiato in

js.sayHello('hello');

ha funzionato.


Non ho idea del parametro senza virgolette ... sembra che tu abbia avuto un errore di riferimento.
Aluan Haddad,

Ho avuto un problema in Freemarker e il motivo era l'assenza di virgolette singole, quindi il valore non è stato trattato come una stringa, ma come una variabile
torina

4

Manca il tuo file JavaScript, quindi si è verificato questo errore. Aggiungi semplicemente il file JavaScript all'interno del <head>tag. Vedi l'esempio:

<script src="js/sample.js" type="text/javascript"></script>
<link href="css/sample.css" rel="stylesheet" type="text/css" />

o aggiungi il seguente codice nel tag:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

4

L'errore si verificherà anche nei seguenti due scenari.

  1. L'elemento script @section non è presente nel file HTML
  2. Errore durante l'accesso agli elementi DOM. Ad esempio, l'accesso all'elemento DOM è indicato come $ ("js-toggle") anziché $ (". Js-toggle"). In realtà manca il periodo

Quindi 3 cose da seguire - controlla che siano aggiunti gli script richiesti, controlla se viene aggiunto nell'ordine richiesto e errori di terza sintassi nello script Java.


Si. e per gli attributi id $ ('# someDiv')
cagcak,

3

Doh! Avevo virgolette miste nei miei tag che causavano l'interruzione del riferimento jquery. Fare un'ispezione in Chrome mi ha permesso di vedere che il file non era collegato correttamente.


3

Nel mio caso ho dimenticato di includere questo:

 <script src ="jquery-2.1.1.js"></script>

In precedenza includevo solo jquery-mobile che causava questo errore.


3

Ho modificato il tag dello script per puntare al contenuto giusto e ho cambiato l'ordine degli script in modo che fosse quello giusto nell'editor. Ma ho completamente dimenticato di salvare il cambiamento.


2

Ho avuto un problema simile ed era perché mancava una chiusura> su un collegamento al foglio di stile.


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

Ho un problema simile, e sai cosa, è perché la rete è disconnessa quando eseguo il test nella vista web del dispositivo Android e non me ne rendo conto, e il js locale non è un problema da caricare perché non ha bisogno di rete. Sembra ridicolo ma sprecare la mia ~ 1 ora per capirlo.


2

Non hai fatto riferimento a una libreria jQuery.

Devi includere una riga simile a questa nel tuo HTML:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

2

Ho avuto un problema simile. Il mio server di test funzionava perfettamente con "http". Tuttavia fallì nella produzione che aveva SSL.

Così nella produzione, ho aggiunto "HTPPS" invece di "HTTP" e in fase di test ho continuato come è "HTTP".

Test:

wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js', array(), null, false );

wp_register_script( 'custom-script', plugins_url( '/js/custom.js', __FILE__ ), array( 'jquery' ) );

Produzione:

wp_register_script( 'jquery', 'https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js', array(), null, false );

wp_register_script( 'custom-script', plugins_url( '/js/custom.js', __FILE__ ), array( 'jquery' ) );

Spero che questo possa aiutare qualcuno che sta lavorando su wordpress.


1

Abbastanza strano, il mio problema veniva da PHP.

Una chiamata all'API REST non è riuscita e successivamente ha interrotto il caricamento delle librerie. Dal momento che il fallimento era dalla chiamata REST, non mi stava dando un errore di compilazione php.

Conservalo anche come opzione, se il caricamento di jquery sembra corretto.


1

Ho avuto questo problema, mentre stavo navigando in Internet attraverso il mio hotspot mobile. stava anche comprimendo le immagini e ha aggiunto il seguente script nella parte inferiore del tag body

<script language="javascript"><!--
bmi_SafeAddOnload(bmi_load,"bmi_orig_img");//-->
</script>

Quando mi sono collegato a una corretta connessione wifi, tutto sembra funzionare per me. Spero che questo aiuti qualcuno.


1

Questo può accadere anche se c'è un problema di rete. Il che significa che anche se gli "script jquery" sono in atto e sono inclusi prima dell'uso, poiché gli script jquery non sono accessibili, al momento del caricamento della pagina, quindi le definizioni di "$" sono trattate come "riferimenti indefiniti".

PER SCOPI DEL TEST / DEBUG :: Puoi provare ad accedere all'URL "jquery-script" sul browser. Se è accessibile, la tua pagina dovrebbe caricarsi correttamente, altrimenti mostrerà il suddetto errore (o altri errori relativi allo script). Esempio: http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js dovrebbe essere accessibile nel browser (o nelle posizioni di contesto del browser).

Avevo un problema simile, in cui ero in grado di caricare la pagina html (usando gli script) nel mio browser windows-host, ma non ero in grado di caricare in vm-ubuntu. Risolvendo il problema di rete, il problema è stato risolto.


0
var $ = jQuery;
jQuery(document).ready(function($){

1
Questa non è assolutamente una risposta. Devi aggiungere alcune spiegazioni.
jmlemetayer,

Questa è una soluzione Wordpressche dovresti menzionare.
Hexodus,

Mi hai salvato la giornata. Stavo lottando per farlo in WordPress e nessuno, ma questa soluzione ha funzionato come un fascino.
rahimv,
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.