Nicht gefangener ReferenceError: $ ist nicht definiert?


657

Wie kommt es, dass dieser Code eine

Nicht gefangener ReferenceError: $ ist nicht definiert

Wann war es vorher in Ordnung?

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

Ergebnisse in Registerkarten werden nicht mehr geschlossen.

Auf jQuery wird im Header verwiesen:

<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> Nehmen Sie dies an Top
Captainsac

In meinem Fall befand sich die JQuery in der Fußzeile, sodass die JS-Funktion zuerst aufgerufen wurde.
Daniel Beltrami

Beantwortet das deine Frage? ReferenceError: $ ist nicht definiert
Brynn

Antworten:


687

Sie sollten zuerst die Verweise auf die jquery-Skripte setzen.

<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
Nur um sicherzugehen, dass dies klar ist: Sie können den Skriptverweis auf jquery-ui nicht vor dem jquery-Skript selbst setzen. Das hat das Problem für mich behoben: zuerst jquery-xxxmin.js, dann jquery-ui-xxxxxx.js.
Wagner da Silva

26
2 Jahre später ist die Antwort immer noch nicht "angekreuzt".) Dieser Artikel beschreibt diesen einen und vier weitere häufige Fälle, in denen dieser Fehler auftritt.
Usbekjon

2
@ Usbekjon Das hat es für mich gelöst. Der Pfad zum Skript war in einer meiner HTMLDateien falsch .
Adam Jensen

@ Jeremy, vielen Dank. Stellen Sie es auch vor eine Teilansicht (mvc), damit es für jedes Skript in der Teilansicht verfügbar ist.
Andrew Day

1
@ Usbekjon jetzt fast 10 Jahre und es ist immer noch nicht angekreuzt. Vielen Dank für die Bereitstellung des Artikellinks.
Modo

235

Sie rufen die Ready-Funktion auf, bevor das jQuery-JavaScript enthalten ist. Verweisen Sie zuerst auf jQuery.


30
@ RamSharma Eigentlich ist dies die richtige Antwort. Sie brauchen nichts anderes, um das Problem zu lösen.
Derek 20 會 功夫

Jep. Das war mein Problem. Hatte einfach jquery NACH dem Verweisen auf meine js-Datei. D'oh!
Dogonaroof

In meinem Fall musste ich den Schlüsselaufschub aus <script src = "/ js / jquery-1.2.6.min.js" aufschieben> </ script>
entfernen

123

Das hat es für mich gelöst. Ursprünglich bin ich zu Google gegangen und habe das vorgeschlagene Snippet für jQuery kopiert und auf der CDN-Seite eingefügt:

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

Das Snippet enthält das HTTP:oder nicht HTTPS:im srcAttribut, aber mein Browser, FireFox, benötigte es, also änderte ich es in: Bearbeiten: Dies funktionierte auch bei Google Chrome

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

Dann hat es funktioniert.


13
Genau genommen ist das Google-Snippet / -Beispiel korrekt - das src-Attribut ist eine protokolllose URL, was bedeutet, dass der Browser das Protokoll (HTTP / HTTPS) der aufrufenden Seite verwenden sollte. Siehe paulirish.com/2010/the-protocol-relative-url . Dies ist eine bewährte Methode, um Warnungen vor gemischten Inhalten zu vermeiden, wenn Ihre Seite jemals über SSL bereitgestellt wird und die Skripte nicht.
pwdst

12
Ein häufiges Problem ist hier wahrscheinlich, wenn während der Entwicklung protokollbezogene URLs verwendet werden und Sie an einem sonnigen Tag versuchen, eine Seite aus einer lokalen Datei zu laden. Ihr Browser versucht optimistisch zu laden file://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.jsund Sie fragen sich, warum er nicht in der Netzwerkkonsole angezeigt wird .
Pieter Ennes

danke @PieterEnnes, genau das war bei mir der Fall. Danke auch an den Antwortenden!
JWG

43

Wenn Ihr benutzerdefiniertes Skript geladen wird, bevor das jQuery-Plugin in den Browser geladen wird, kann diese Art von Problem auftreten. Behalten Sie also immer Ihren eigenen JavaScript- oder jQuery-Code, nachdem Sie das jQuery-Plugin aufgerufen haben. Die Lösung hierfür lautet:

Fügen Sie zunächst den Link zur bei GoogleApis gehosteten jQuery-Datei oder zu einer lokalen jQuery-Datei hinzu, die Sie von http://jquery.com/download/ herunterladen und auf Ihrem Server hosten:

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

oder ein Plugin für jQuery. Fügen Sie dann Ihren benutzerdefinierten Skriptdateilink oder -code ein:

<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 Die perfekte Antwort. In meinem Fall war das Skript in der Fußzeile
Echoashu

41

In meinem Fall habe ich meine .jsDatei vor den Link zum jQuery-Skript gestellt. Durch das Einfügen der .jsDatei nach dem Link zum jQuery-Skript wurde mein Problem behoben.

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

Ich habe das gerade benutzt, um meinen Jschart zu reparieren.
Indofraiser

Dadurch wurde das Problem behoben. Die .js Datei sollte vor dem Link zum jQuery-Skript abgelegt werden.
Die wissenschaftliche Methode

27

Okay, mein Problem war anders - es war das Document Security- Modell in Chrome .

Als ich mir die Antworten hier ansah, war es offensichtlich, dass ich meine JQuery-Dateien vor dem Aufrufen der $(document).ready()Funktionen usw. nicht geladen habe . Sie befanden sich jedoch alle in der richtigen Position.

In meinem Fall lag dies daran, dass ich über eine sichere HTTPS-Verbindung auf den Inhalt zugegriffen habe, während auf der Seite versucht wurde, die von CDN gehosteten Daten von Google usw. herunterzuladen. Die Lösung bestand darin, sie lokal zu speichern und dann direkt und nicht von der Website einzuschließen CDN jedes Mal.

Bearbeiten : Die andere Möglichkeit besteht darin, auf alle von CDN gehosteten Inhalte als https: // anstatt als http: // zu verlinken. Dann beschwert sich das Modell nicht.


5
Beachten Sie außerdem, dass Sie das Protokoll von Links fernhalten können und je nach Kontext das entsprechende auswählen (vorausgesetzt, es sind sowohl http- als auch https-Versionen vorhanden). Siehe stackoverflow.com/a/3622615/4332
Adrian Mouat

ja. Dieser hat mein Problem gelöst. Ich habe die Skripte von einer URL wie dieser geladen: // cdnjs.cloudflare.com / ajax / libs / jquery / 1.12.0 / jquery.min.js. Die Verwendung von ´ cdnjs ... ´ funktioniert hervorragend
user9869932

25

Fügen Sie die Bibliothek , bevor Sie die script.You beginnen irgendwelchen folgenden hinzufügen können CDN es zu starten.

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

Wenn Sie eine andere Jquery-CDN-Version wünschen, klicken Sie auf diesen Link .

Danach:

<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

Wenn es in WordPress ist, muss es möglicherweise geändert werden

$(document).ready(function() {

zu

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

oder hinzufügen

var $ = jQuery;

Vor

$(document).ready(function() {

19

Ich hatte genau das gleiche Problem und keine dieser oben genannten Lösungen half. Ich habe jedoch nur die .cssDateien nach den .jsDateien verlinkt und das Problem ist auf wundersame Weise verschwunden. Hoffe das hilft.


13
Um eine bessere Leistung beim Rendern von Seiten zu erzielen, sollten Sie CSS-Dateien immer vor JS-Dateien verknüpfen. Zweitens sollte die Reihenfolge der CSS- und JS-Dateien in der aktuellen Situation keine Auswirkung haben.
Usbekjon

12
"Was Ihr Problem behoben hat, sollte Ihr Problem nicht beheben, und Sie sollten nicht das tun, was Ihr Problem behoben hat."
Andrew

14

In meinem Fall hatte ich diesen referenceError, da die Reihenfolge der Skriptaufrufe falsch war. Das wurde durch Ändern der Reihenfolge behoben:

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

zu

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

1
Meistens war dies das Problem, das ich auch fand, als ein Referenzfehler für '$' auftrat
Dipak

14

Ich wollte versuchen, mein Skript asynchron zu machen . Dann habe ich es vergessen und als ich live ging, wurde die [custom] .js-Datei nur 50% der Zeit vor der jQuery.js geladen.

Also habe ich mich verändert

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

zu

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

8

Ich hatte das gleiche Problem und löste es, indem ich jQuery an die Spitze aller Javascript-Codes setzte, die ich in meinem Code habe.

Etwas wie das:

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

Hoffnung kann jemandem in Zukunft helfen.


8

Sie rufen die ready() Funktion auf, bevor das jQuery-JavaScript enthalten ist. Verweisen Sie zuerst auf jQuery.

Wenn Sie sich in ASP.NET MVC befinden, können Sie Folgendes festlegen, wann Ihr JS-Code gerendert werden soll:

1, in Ihrer page.cshtmlVerpackung Ihres <script>Tag in einen Abschnitt, und ihm einen Namen geben, der gemeinsame Name zu verwenden ist ‚Skripte‘:

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

2, Stellen Sie beim Hinzufügen Ihrer _Layout.cshtmlSeite @RenderSection("Scripts", required: false)sicher, dass Sie es einfügen, nachdem Sie auf die Jquery-Quelle verwiesen haben. Dadurch wird Ihr JS-Code später als die Jquery gerendert.


6

Wenn Sie dies in .Net tun und die Skriptdatei ordnungsgemäß referenziert haben und jQuery gut aussieht, stellen Sie sicher, dass Ihre Benutzer Zugriff auf die Skriptdatei haben. Bei dem Projekt, an dem ich gearbeitet habe (ein Mitarbeiter), wurde mit web.config der Zugriff auf anonyme Benutzer verweigert. Die Seite, an der ich arbeitete, war für anonyme Benutzer zugänglich, daher hatten sie keinen Zugriff auf die Skriptdatei. Folgendes wurde in die web.config eingefügt und alles war in Ordnung in der Welt:

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

6

In meinem Fall war es ein Tippfehler, ich habe einen Backslash vergessen und die Quelle falsch referenziert.

Vor src="/scripts/jquery.js"

Nach    src="scripts/jquery.js"


5

Die Quelldatei jquery-1.2.6.min.jsheißt nicht. Der Befehl jQuery $()wird früher als ausgeführt <..src='jquery-1.2.6.min.js'>.

Bitte führen Sie <.. src="/js/jquery-1.2.6.min.js..">zuerst aus und stellen Sie sicher, dass der src-Pfad richtig ist. Führen Sie dann den Befehl jquery aus

$(document).ready(function() 

5

Das ist mir schon mal passiert.

Der Grund war, dass ich Android mit einer Webansicht mit einem JS verbinde. Und ich habe einen Parameter ohne Anführungszeichen gesendet.

js.sayHello(hello);

und als ich es geändert habe

js.sayHello('hello');

es funktionierte.


Ich habe keine Ahnung, was Parameter ohne Anführungszeichen bedeuten ... es klingt, als hätten Sie einen Referenzfehler.
Aluan Haddad

Ich hatte ein Problem in Freemarker und der Grund war das Fehlen von einfachen Anführungszeichen, so dass der Wert nicht wie eine Zeichenfolge behandelt wurde, sondern als Variable
Torina

4

Ihre JavaScript-Datei fehlt, daher ist dieser Fehler aufgetreten. Fügen Sie einfach die JavaScript-Datei in das <head>Tag ein. Siehe das Beispiel:

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

oder fügen Sie den folgenden Code in das Tag ein:

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

4

Der Fehler tritt auch in den folgenden beiden Szenarien auf.

  1. Das Element @section scripts fehlt in der HTML-Datei
  2. Fehler beim Zugriff auf DOM-Elemente. Beispielsweise wird der Zugriff auf das DOM-Element als $ ("js-toggle") anstelle von $ (". Js-toggle") erwähnt. Eigentlich fehlt der Punkt

Es sind also drei Dinge zu beachten: Überprüfen Sie, ob die erforderlichen Skripte hinzugefügt wurden, ob sie in der erforderlichen Reihenfolge hinzugefügt wurden und ob die dritte Syntax in Ihrem Java-Skript fehlerhaft ist.


Ja. und für ID-Attribute $ ('# someDiv')
cagcak

3

Doh! Ich hatte gemischte Anführungszeichen in meinen Tags, die dazu führten, dass die jquery-Referenz unterbrochen wurde. Durch eine Inspektion in Chrome konnte ich feststellen, dass die Datei nicht ordnungsgemäß verknüpft war.


3

In meinem Fall habe ich vergessen, Folgendes aufzunehmen:

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

Früher habe ich nur jquery-mobile aufgenommen, was diesen Fehler verursacht hat.


3

Ich habe das Skript-Tag so geändert, dass es auf den richtigen Inhalt verweist, und die Skriptreihenfolge so geändert, dass sie im Editor die richtige ist. Aber total vergessen, die Änderung zu speichern.


2

Ich hatte ein ähnliches Problem und es lag daran, dass mir ein> Schließen eines Stylesheet-Links fehlte.


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>

Ich habe ein ähnliches Problem, und weißt du was ? Es liegt daran, dass das Netzwerk beim Testen in der Webansicht des Android-Geräts nicht verbunden ist und ich es nicht merke. Das lokale js ist kein Problem beim Laden, da es kein Netzwerk benötigt. Es scheint lächerlich, aber es verschwendet meine ~ 1 Stunde, um es herauszufinden.


2

Sie haben nicht auf eine jQuery-Bibliothek verwiesen.

Sie müssen eine ähnliche Zeile in Ihr HTML einfügen:

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

2

Ich hatte ein ähnliches Problem. Mein Testserver funktionierte einwandfrei mit "http". Es schlug jedoch in der Produktion fehl, die SSL hatte.

Daher habe ich in der Produktion "HTPPS" anstelle von "HTTP" hinzugefügt und im Test habe ich beibehalten, wie es "HTTP" ist.

Prüfung:

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' ) );

Produktion:

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' ) );

Hoffe, dies wird jemandem helfen, der an WordPress arbeitet.


1

Seltsamerweise kam mein Problem von PHP.

Ein REST-API-Aufruf schlug fehl und das Laden der Bibliotheken wurde anschließend unterbrochen. Da der Fehler vom REST-Aufruf herrührte, gab es keinen PHP-Kompilierungsfehler.

Behalten Sie dies auch als Option bei, wenn das Laden von jquery in Ordnung erscheint.


1

Ich hatte dieses Problem, als ich über meinen mobilen Hotspot im Internet surfte. Außerdem wurden Bilder komprimiert und das folgende Skript am unteren Rand des Body-Tags hinzugefügt

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

Wenn ich mich mit der richtigen WLAN-Verbindung verbunden habe, scheint alles für mich zu funktionieren. Hoffe das hilft jemandem.


1

Dies kann auch passieren, wenn ein Netzwerkproblem vorliegt. Dies bedeutet, dass, obwohl die "JQuery-Skripte" vorhanden sind und vor der Verwendung enthalten sind, zum Zeitpunkt des Ladens der Seite auf die JQuery-Skripte nicht zugegriffen werden kann, daher die Definitionen für das "$" als behandelt werden "undefinierte Referenzen".

FÜR TEST- / DEBUG-ZWECKE :: Sie können versuchen, im Browser auf die URL "jquery-script" zuzugreifen. Wenn darauf zugegriffen werden kann, sollte Ihre Seite ordnungsgemäß geladen werden. Andernfalls wird der Fehler (oder andere skriptrelevante Fehler) angezeigt. Beispiel - http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js sollte über den Browser (oder die Kontexteinstellungen des Browsers) zugänglich sein.

Ich hatte ein ähnliches Problem, bei dem ich die HTML-Seite (mithilfe von Skripten) in meinen Windows-Host-Browser laden konnte, aber nicht in vm-ubuntu laden konnte. Durch Lösen des Netzwerkproblems wurde das Problem behoben.


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

1
Dies ist absolut keine Antwort. Sie müssen einige Erklärungen hinzufügen.
jmlemetayer

Dies ist eine Lösung, für die WordpressSie dies erwähnen sollten.
Hexodus

Du hast meinen Tag gerettet. Ich hatte Mühe, es in WordPress zu tun, und keine, aber diese Lösung funktionierte wie ein Zauber.
Rahimv
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.