JQuery - $ non è definito


486

Ho un semplice evento jquery con clic

<script type="text/javascript">
    $(function() {
        $('#post').click(function() {
            alert("test"); 
        });
    });
</script>

e un riferimento jquery definito in site.master

<script src="<%=ResolveUrl("~/Scripts/jquery-1.3.2.js")%>" type="text/javascript"></script>

Ho verificato che lo script sia stato risolto correttamente, sono in grado di vedere il markup e visualizzare lo script direttamente in firebug, quindi devo essere trovato. Tuttavia, sto ancora ottenendo:

$ non è definito

e nessuna delle opere jquery funziona. Ho anche provato le varie varianti di questo tipo $ (document) .ready e jQuery ecc.

È un'app MVC 2 su .net 3.5, sono sicuro di essere davvero denso, ovunque su google dice di controllare che il file venga referenziato correttamente, che ho controllato e controllato di nuovo, per favore avvisa! : /


6
Vedi effettivamente il jquery-1.3.2.js richiesto e caricato con il codice di risposta HTTP200, se controlli il caricamento della pagina con lo strumento Fiddler?
naivisti,

18
la tua sceneggiatura viene eseguita prima di jquery?
Surya,

2
Puoi visualizzare la fonte e fare clic sul collegamento js. Sembra che il tuo jquery non sia caricato sulla pagina. Prova la schermata della console di Firebug per visualizzare gli errori Prova anche ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js nel tag dello script
nemke,

2
Lo script viene attivato prima che venga caricata la fonte jquery?
Dave Bacher,

1
@ Surya / Dave, ora sono tornato a casa, quindi domani lo controllerò di nuovo, e tornerò e pubblicherò, ma penso che probabilmente il problema,: / che imbarazzante!
Paul Creasey,

Risposte:


560

Tale errore può essere causato solo da una di queste tre cose:

  1. Il tuo file JavaScript non viene caricato correttamente nella tua pagina
  2. Hai una versione pasticciata di jQuery. Questo potrebbe accadere perché qualcuno ha modificato il file principale o un plugin potrebbe aver sovrascritto la variabile $.
  3. JavaScript è in esecuzione prima che la pagina sia completamente caricata e, come tale, prima che jQuery sia completamente caricata.

Prima di tutto, assicurati, quale script viene chiamato correttamente, dovrebbe apparire come

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>

e non dovrebbe avere attributi asincroni o differiti .

Quindi dovresti controllare la rete Firebug pannello per vedere se il file viene effettivamente caricato correttamente. In caso contrario, verrà evidenziato in rosso e verrà visualizzato "404" accanto. Se il file viene caricato correttamente, significa che il problema è il numero 2.

Assicurati che tutto il codice javascript jQuery sia eseguito all'interno di un blocco di codice come:

$(document).ready(function () {
  //your code here
});

Questo assicurerà che il tuo codice venga caricato dopo inizializzazione di jQuery.

Un'ultima cosa da verificare è assicurarsi che non si stia caricando alcun plug-in prima di caricare jQuery. I plugin estendono l'oggetto "$", quindi se carichi un plugin prima di caricare jQuery core, otterrai l'errore che hai descritto.

Nota: se si sta caricando un codice che non richiede l'esecuzione di jQuery, non è necessario inserirlo nel gestore pronto per jQuery. Quel codice può essere separato usando document.readyState.


182
Per quanto riguarda il tuo blocco di codice, $(document)non funzionerà neanche a meno che tu non abbia un tag script che includa jQuery prima di quella dichiarazione ...
PatrikAkerstrand,

3
Vorrei aggiungere che avevo lo stesso problema dell'OP e il mio problema era che l'uso di https con la libreria di jquery non funziona così bene.
Mike Cheel,

20
(funzione ($) {}) (jQuery);
Jack Mahoney

2
@Patrik: vedi la mia risposta per una soluzione usando una sezione script nella vista. In questo modo jquery verrà caricato per primo e $ sarà definito correttamente.
angularsen,

1
Controlla se hai anche l'asincronizzazione nello script, questo è ciò che ha causato il problema nel mio caso.
Anders,

207

È possibile che tu abbia il tag dello script chiamato prima che venga chiamato lo script jquery.

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

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>

Questo risulta come $ non definito

Metti jquery.js prima del tag dello script e funzionerà;) in questo modo:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>

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

1
Questa è un'ottima risposta L'ho provato e ha funzionato per me. Sto usando VS 2013 e ASP.net. Sai come posso caricare javascript prima che la pagina si carichi automaticamente in asp.net o devo fare riferimento javascript in questo modo in tutti i miei file?
Pat

Da aggiungere alla tua risposta. In ASP.net puoi andare su Shared_Layout.cshtml `<head> </head>`
Pat

@pat e assicurati di scrivere il tuo codice all'interno di un @section Scriptstag
Marc

Aggiorna la risposta per utilizzare HTTPS e considera l'utilizzo di SPI devdocs.io/html/attributes#integrity-attribute
Josh Habdas

66

Per prima cosa devi assicurarti che lo script jQuery sia caricato. Questo potrebbe provenire da un CDN o locale sul tuo sito web. Se non lo carichi prima di provare a usare jQuery ti dirà che jQuery non è definito.

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

Questo potrebbe essere nell'HEAD o nel piè di pagina della pagina, assicurati di caricarlo prima di provare a chiamare qualsiasi altra cosa jQuery.

Quindi è necessario utilizzare una delle due soluzioni seguenti

(function($){
// your standard jquery code goes here with $ prefix
// best used inside a page with inline code, 
// or outside the document ready, enter code here
 })(jQuery); 

o

jQuery(document).ready(function($){
// standard on load code goes here with $ prefix
// note: the $ is setup inside the anonymous function of the ready command
});

si prega di essere consapevoli del fatto che molte volte $ (document) .ready (function () {// code here}); non funzionerà.


1
"jQuery non è definito". Esiste tuttavia dopo il caricamento della pagina.
Paul Totzke,

Non sono sicuro che si tratti di una domanda o un'affermazione, ma, vorrei verificare che si effettui la chiamata per lo script jQuery prima di provare a utilizzarlo. Sembra come caricarlo nel piè di pagina e chiamare le cose più in alto nella pagina.
Andrew Killen,

Mi dispiace, ho pensato che fosse una tecnica per usare gli script in qualsiasi ordine. Sì, lo stavo usando nella sezione body in stile MVC. mycode.js quindi jQuery.js sono le ultime 2 cose sulla pagina.
Paul Totzke,

Non preoccuparti, Paul, ho modificato la soluzione per includere "devi prima caricare ...". :)
Andrew Killen,

Questo risolve il problema di "I miei script sono nell'ordine giusto ma gli script sono caricati in un ordine diverso". Ricordo di aver fatto qualcosa del genere 4 anni fa, ma non ricordo quale problema sia stato risolto.
Paul Totzke,

50

Se la chiamata del plug-in jQuery si trova accanto a </body>, e lo script è stato caricato prima di ciò, è necessario eseguire il codice dopo l' window.onloadevento, in questo modo:

window.onload = function() {
  //YOUR JQUERY CODE
}

`

pertanto, il codice verrà eseguito solo dopo il caricamento della finestra, quando tutte le risorse sono state caricate. A quel punto, $verrà definito jQuery ( ).

Se lo usi:

$(document).ready(function () {
  //YOUR JQUERY CODE
});

`

al momento $non è ancora definito, perché viene chiamato prima che jQuery venga caricato e lo script non funzionerà su quella prima riga sulla console.


Generalmente una cattiva idea da legare a window.unload. Sarà effettivamente l'unico evento che si svolgerà !!!
Rudi Strydom,

Nota: Ricorda che puoi assegnare una sola funzione window.onload, se le assegni un'altra funzione, la precedente non verrà eseguita.
Bruno Peres,

28

Ho appena fatto la stessa cosa e ho scoperto di averne un sacco

type="text/javacsript"

Quindi stavano caricando, ma nessun ulteriore indizio sul perché non funzionasse. Inutile dire che l'ortografia corretta l'ha risolto.


Nota del moderatore : l'errore di battitura in questo post è deliberato , per illustrare un punto. Si prega di non modificare il post per "correggere" questo.
Martijn Pieters

23

Utilizzare una sezione di script nella vista e nel layout principale.

Inserisci tutti gli script definiti nella vista all'interno di una sezione Script della vista. In questo modo è possibile caricare il layout principale dopo aver caricato tutti gli altri script. Questa è l'impostazione predefinita all'avvio di un nuovo progetto Web MVC5. Non sono sicuro delle versioni precedenti.

Vista / Foo / MyView.cshtml:

// The rest of your view code above here.

@section Scripts 
{ 
    // Either render the bundle defined with same name in BundleConfig.cs...
    @Scripts.Render("~/bundles/myCustomBundle")

    // ...or hard code the HTML.
    <script src="URL-TO-CUSTOM-JS-FILE"></script>

    <script type="text/javascript">
      $(document).ready(function () {

        // Do your custom javascript for this view here. Will be run after 
        // loading all the other scripts.            
      });
    </script>
}

Vista / Shared / _Layout.cshtml

<html>
<body>
    <!-- ... Rest of your layout file here ... -->

    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/bootstrap")
    @RenderSection("scripts", required: false)
</body>
</html>

Nota come la sezione degli script viene visualizzata per ultima nel file di layout principale.


2
Nota: le sezioni di visualizzazione non sono supportate nelle viste parziali in base alla progettazione.
Adam Naylor,

Questo è quello che dovevo fare per la mia correzione .... e avrei dovuto sapere meglio di usare gli @Scripts in primo luogo, ma me ne sono dimenticato finché non ho cercato una soluzione.
Caverman,

12

assicurati di caricare davvero jquery questo non è jquery - è l'interfaccia utente!

  <script language="JavaScript" 
    src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.0/jquery-ui.min.js">
  </script>

Questa è una fonte di script corretta per jquery:

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

11

Come detto sopra, succede a causa del conflitto di $ variabile.

Ho risolto questo problema riservando una variabile secondaria per jQuery senza conflitti.

var $j = jQuery.noConflict();

e poi usalo ovunque

$j( "div" ).hide();

maggiori dettagli possono essere trovati qui


8

Significa che la tua libreria jQuery non è stata ancora caricata.

È possibile spostare il codice dopo aver estratto la libreria jQuery.

oppure puoi usare qualcosa del genere

window.onload = function(){
  // Your code here
};  

Questo si attiva dopo che il DOM è stato caricato, ma non quando sono stati caricati controlli, javascript e altri programmi in esecuzione in background. Un ritardo dovrebbe essere utilizzato per far funzionare tutto questo.
Fandango68,


5

dopo alcuni test ho trovato una soluzione rapida, è possibile aggiungere nella parte superiore della pagina dell'indice:

<script>
$=jQuery;
</script>

funziona molto bene :)


4
la domanda era: $ non è definito, no?
Mimouni,

Errore di riferimento non rilevato: jQuery non è definito
Simon Schnell,

L'hai messo proprio sotto l'importazione della libreria jQuery?
Mike Warren,

4

Ho ricevuto lo stesso messaggio di errore quando ho scritto erroneamente il riferimento jQuery e invece di type="text/javascript"digitare "... javascirpt". ;)


Eureka! Ho avuto il mio come type="text/css". Grazie per avermi salvato la salute mentale!
Jeriko,

Ho fatto lo sciocco e l'ho fatto type="javascript". Ho sprecato 30 minuti a trovarlo.
muratore il

4

Sembra che jQuery non si stia caricando correttamente. Quale fonte / versione stai usando?

In alternativa, potrebbe trattarsi di una collisione dello spazio dei nomi, quindi prova a usare esplicitamente jQuery invece di usarlo $. Se funziona, potrebbe essere utile utilizzare noConflictper assicurarsi che l'altro codice utilizzato $non si interrompa.


3

Questo errore indica che jQuery non è ancora stato caricato sulla pagina. L'uso $(document).ready(...)o qualsiasi sua variante non andrà a buon fine, come $la funzione jQuery.

L'uso window.onloaddovrebbe funzionare qui. Si noti che è possibile assegnare una sola funzione window.onload. Per evitare di perdere la logica di caricamento originale, puoi decorare la funzione originale in questo modo:

originalOnload = window.onload;
window.onload = function() {
  if (originalOnload) {
    originalOnload();
  }
  // YOUR JQUERY
};

Ciò eseguirà la funzione che era stata originariamente assegnata window.onloade quindi verrà eseguita // YOUR JQUERY.

Vedi https://en.wikipedia.org/wiki/Decorator_pattern per maggiori dettagli sul motivo del decoratore.


2

Uso Url.Content e non ho mai avuto problemi.

<script src="<%= Url.Content ("~/Scripts/jquery-1.4.1.min.js") %>" type="text/javascript"></script>

2

Nella soluzione è menzionato: "Un'ultima cosa da verificare è assicurarsi che non si stiano caricando alcun plug-in prima di caricare jQuery. I plug-in estendono l'oggetto" $ ", quindi se si carica un plug-in prima di caricare jQuery core, verrà visualizzato l'errore che hai descritto. "

Per evitare questo -

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 dobbiamo usare un'altra libreria JavaScript insieme a jQuery, possiamo restituire il controllo di $ back all'altra libreria con una chiamata a $ .noConflict ():


1

Ho avuto questo problema una volta senza una ragione apparente. Stava accadendo localmente mentre stavo eseguendo il server di sviluppo aspnet. Aveva funzionato e ho ripristinato tutto in uno stato in cui in precedenza aveva funzionato e ancora non funzionava. Ho guardato il debugger di Chrome e jquery-1.7.1.min.js si era caricato senza problemi. Era tutto molto confuso. Ancora non so quale fosse il problema, ma chiudendo il browser, chiudendo il server di sviluppo e quindi riprovando a risolverlo.


1

Posiziona l'URL jquery in cima al codice jquery

come questo--

<script src="<%=ResolveUrl("~/Scripts/jquery-1.3.2.js")%>" type="text/javascript"></script>

<script type="text/javascript">
    $(function() {
        $('#post').click(function() {
            alert("test"); 
        });
    });
</script>

1

Ho avuto lo stesso problema ed era perché il mio riferimento a jQuery.js non era nel tag. Una volta che l'ho cambiato, tutto ha iniziato a funzionare.

Anthony


1
  1. Controlla che sia incluso il percorso esatto del tuo file jquery.

    <script src="assets/plugins/jquery/jquery.min.js"></script>

se lo aggiungi in fondo alla tua pagina, chiama tutti la funzione JS sotto questa dichiarazione.

  1. Controlla usando questo test del codice,

    <script type="text/javascript">
    /***
     * Created by dadenew
     * Submit email subscription using ajax
     * Send email address
     * Send controller
     * Recive response
     */
    $(document).ready(function() { //you can replace $ with Jquery
    
      alert( 'jquery working~!' );
    });

Pace!


0

Abbiamo lo stesso problema .... ma per sbaglio ho controllato le proprietà della cartella e impostato qualcosa ...

Devi controllare le proprietà di ogni cartella a cui accedi.

  1. cartella del tasto destro
  2. scheda 'autorizzazioni'
  3. impostare l'accesso alla cartella: PROPRIETARIO: creare ed eliminare i file GRUPPO: accedere ai file ALTRI: accedere ai file

Spero che questa sia la soluzione ......


0

Quando si utilizza jQuery in asp.net, se si utilizza una pagina master e si carica il file sorgente jquery lì, assicurarsi di avere l'intestazione contentplaceholder dopo tutti i riferimenti allo script jquery.

Ho avuto un problema a causa del quale qualsiasi pagina che utilizzava quella pagina principale restituiva "$ non è definita" semplicemente perché l'ordine errato stava facendo eseguire il codice lato client prima della creazione dell'oggetto jquery. Quindi assicurati di avere:

<head runat="server">
    <script type="text/javascript" src="Scripts/jquery-VERSION#.js"></script>
    <asp:ContentPlaceHolder id="Header" runat="server"></asp:ContentPlaceHolder>
</head>

In questo modo il codice verrà eseguito in ordine e sarai in grado di eseguire il codice jQuery nelle pagine figlio.


0

Nel mio caso stavo indicando JQuery ospitato da Google. È stato incluso correttamente, ma ero su una pagina HTTPS e lo chiamavo tramite HTTP. Una volta risolto il problema (o consentito il contenuto non sicuro), è stato attivato.


0

Avevo lo stesso problema e non riuscivo a capire cosa lo causasse. Di recente ho convertito i miei file HTML dal giapponese in UTF-8, ma non ho fatto nulla con i file di script. In qualche modo jquery-1.10.2.min.js si è corrotto in questo processo (non ho ancora idea di come). Sostituendo jquery-1.10.2.min.js con l'originale è stato risolto.


0

sembra che se trovi i tuoi file jquery.js nella stessa cartella o in alcune sottocartelle in cui si trova il tuo file html, il problema Firebug è risolto. ad es. se il tuo html è in C: / cartella1 /, i tuoi file js dovrebbero trovarsi da qualche parte anche in C: / cartella1 / (o C: / cartella1 / cartella2 ecc.) e indirizzati di conseguenza nel documento html. spero che sia di aiuto.


0

Ho lo stesso problema e nessun caso mi risolve il problema. L'unica cosa che funziona per me è il file del file Site.master, il seguente:

<script src="<%= ResolveUrl("~/Scripts/jquery-1.7.1.min.js") %>" type="text/javascript"></script>
<script src="<%= ResolveUrl("~/Scripts/bootstrap/js/bootstrap.min.js") %>" type="text/javascript"></script>

Con src = "<% = ResolveUrl (" ") ... il caricamento di jQuery nelle pagine di contenuto è corretto.


0

Ho avuto un problema molto simile. Nella mia applicazione MVC C #, JQuery non veniva riconosciuto. Avevo bisogno di spostare @ Scripts.Render ("~ / bundles / jquery") dalla fine del mio file _Layout.cshtml all'inizio della sezione. Assicurati anche di aver preso Jquery come pacchetto Nuget se stai usando Visual Studio!

<head>
    @Scripts.Render("~/bundles/jquery")
</head>

0

C'è un modo per caricare automaticamente javascript prima che venga eseguito il resto del codice.

Vai in Views \ Shared_Layout.html e aggiungi quanto segue

<head>
  <*@ Omitted code*@>
  <script src="~/Scripts/jquery-1.10.2.min.js" type="text/javascript"></script>
</head>

0

se il scripttag ha un deferattributo, mostra l'errore

Errore di riferimento non rilevato: $ non è definito

e deve rimuovere l'attributo deferdal scripttag


0

Questo è il problema comune per risolverlo, è necessario verificare alcuni punti

  1. Includi la libreria principale di Jquery
  2. Controlla il problema tra browser
  3. Aggiungi libreria all'inizio del codice jquery
  4. Controlla i CDN potrebbero essere bloccati.

I dettagli completi sono riportati in questo blog, fare clic 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.