it-swarm.com.de

JQuery - $ ist nicht definiert

Ich habe ein einfaches Jquery-Click-Event

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

und eine Jquery-Referenz, die im site.master definiert ist

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

Ich habe überprüft, ob das Skript korrekt aufgelöst wurde. Ich kann das Markup sehen und das Skript direkt in Firebug anzeigen. Daher muss ich gefunden werden. Ich bekomme jedoch immer noch:

$ ist nicht definiert

und keine der jquery funktioniert. Ich habe auch die verschiedenen Varianten wie $ (document) .ready und jQuery usw. ausprobiert.

Es ist eine MVC-2-App auf .net 3.5. Ich bin mir sicher, dass ich wirklich dicht bin. Überall auf Google sagt, dass die Datei korrekt referenziert wird. Ich habe sie nochmals geprüft. : /

420
Paul Creasey

Dieser Fehler kann nur durch drei Dinge verursacht werden:

  1. Ihre JavaScript-Datei wird nicht ordnungsgemäß in Ihre Seite geladen
  2. Sie haben eine verpfuschte Version von jQuery. Dies kann passieren, weil jemand die Core-Datei bearbeitet hat oder ein Plugin die $ -Variable überschrieben hat.
  3. Sie haben JavaScript ausgeführt, bevor die Seite vollständig geladen ist, und daher auch, bevor jQuery vollständig geladen ist.

Überprüfen Sie im Bedienfeld Firebugnet, ob die Datei tatsächlich ordnungsgemäß geladen wird. Wenn nicht, wird es rot hervorgehoben und daneben "404" angezeigt. Wenn die Datei ordnungsgemäß geladen wird, bedeutet dies, dass es sich um Nummer 2 handelt.

Stellen Sie sicher, dass der gesamte JavaScript-Code von jQuery in einem Codeblock ausgeführt wird, z.

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

Dadurch wird sichergestellt, dass der Code geladen wird after jQuery wurde initialisiert.

Eine letzte Sache, die Sie überprüfen müssen, ist sicherzustellen, dass Sie keine Plugins vorher laden, in die Sie jQuery laden. Plugins erweitern das "$" - Objekt. Wenn Sie also ein Plugin laden, bevor Sie den jQuery-Core laden, wird der von Ihnen beschriebene Fehler angezeigt.

Hinweis: Wenn Sie Code laden, für den jQuery nicht ausgeführt werden muss, muss er nicht in den jQuery-fähigen Handler eingefügt werden. Dieser Code kann mit document.readyState getrennt werden.

489
Mike Trpcic

Es kann sein, dass Sie Ihr Skript-Tag aufgerufen haben, bevor das Jquery-Skript aufgerufen wird.

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

Dies ergibt sich, da $ nicht definiert ist

Fügen Sie jquery.js vor Ihrem Skript-Tag ein, und es wird funktionieren;)

<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>
182
Hanky Panky

Zuerst müssen Sie sicherstellen, dass das jQuery-Skript geladen ist. Dies kann von einem CDN oder lokal auf Ihrer Website sein. Wenn Sie dieses nicht zuerst laden, bevor Sie versuchen, jQuery zu verwenden, wird Ihnen mitgeteilt, dass jQuery nicht definiert ist. 

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

Dies kann sich im HEAD oder in der Fußzeile der Seite befinden. Stellen Sie sicher, dass Sie sie laden, bevor Sie versuchen, andere jQuery-Elemente aufzurufen. 

Dann müssen Sie eine der beiden folgenden Lösungen verwenden

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

oder

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

bitte beachten Sie, dass $ (document) .ready (function () {// code here}); wird nicht funktionieren.

55
Andrew Killen

Wenn sich der Aufruf des jQuery-Plugins neben </body> befindet und das Skript davor geladen wurde, sollten Sie den Code nach dem window.onload-Ereignis wie folgt ausführen:

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

`

ihr Code wird also erst nach dem Laden des Fensters ausgeführt, wenn alle Assets geladen wurden. In diesem Punkt wird die jQuery ($) definiert.

Wenn Sie das verwenden:

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

`

der $ ist zu diesem Zeitpunkt noch nicht definiert, da er vor dem Laden der jQuery aufgerufen wird und Ihr Skript in dieser ersten Zeile der Konsole fehlschlägt.

35
dandapereira

Ich habe einfach dasselbe gemacht und festgestellt, dass ich eine ganze Menge davon hatte 

type="text/javacsript"

Sie wurden geladen, aber es gab keinen weiteren Hinweis darauf, warum es nicht funktionierte. Es ist unnötig zu sagen, dass die richtige Schreibweise das Problem behoben hat.

26
George R

Verwenden Sie einen scripts-Abschnitt in der Ansicht und im Master-Layout.

Fügen Sie alle in Ihrer Ansicht definierten Skripts in einen Abschnitt "Scripts" der Ansicht ein. Auf diese Weise können Sie das Master-Layout laden, nachdem alle anderen Skripts geladen wurden. Dies ist die Standardeinstellung beim Starten eines neuen MVC5-Webprojekts. Nicht sicher über frühere Versionen.

Ansichten/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>
}

Ansichten/Freigegeben/_Layout.cshtml

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

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

Beachten Sie, wie der Abschnitt scripts zuletzt in der Master-Layoutdatei dargestellt wird.

18
angularsen

Wie oben erwähnt, geschieht dies aufgrund des Konflikts von $ variable.

Ich habe dieses Problem behoben, indem ich eine sekundäre Variable ohne Konflikt für jQuery reserviert habe.

var $j = jQuery.noConflict();

und dann überall verwenden

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

weitere Details finden Sie hier

8
Tough Guy

stellen Sie sicher, dass Sie wirklich jquery laden Dies ist nicht jquery - es ist die ui!

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

Dies ist eine korrekte Skriptquelle für Jquery:

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

Verwenden Sie andere JavaScript-Bibliotheken? In diesem Fall müssen Sie jQuery wahrscheinlich im Kompatibilitätsmodus verwenden:

http://docs.jquery.com/Using_jQuery_with_Other_Libraries

7
tambler

Dies bedeutet, dass Ihre jQuery-Bibliothek noch nicht geladen wurde.

Sie können Ihren Code verschieben, nachdem Sie die jQuery-Bibliothek abgerufen haben.

oder Sie können so etwas verwenden

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

Ich habe die gleiche Fehlermeldung erhalten, als ich die jQuery-Referenz falsch geschrieben habe und statt type="text/javascript" "... javascirpt" eingegeben habe. ;)

4
alan

Es klingt, als würde jQuery nicht richtig geladen. Welche Quelle/Version verwenden Sie?

Alternativ kann es sich um eine Namensraumkollision handeln. Versuchen Sie daher, jQuery explizit anstelle von $ zu verwenden. Wenn dies funktioniert, möchten Sie möglicherweise noConflict verwenden, um sicherzustellen, dass der andere Code, der $ verwendet, nicht beschädigt wird.

4
Alexender Dumma

nach ein paar tests habe ich eine schnelle lösung gefunden.

<script>
$=jQuery;
</script>

es funktioniert sehr gut :)

3
Mimouni

Dieser Fehler bedeutet, dass jQuery noch nicht auf der Seite geladen ist. Die Verwendung von $(document).ready(...) oder einer beliebigen Variante davon ist nicht sinnvoll, da $ die jQuery-Funktion ist.

Die Verwendung von window.onload sollte hier funktionieren. Beachten Sie, dass nur eine Funktion window.onload zugewiesen werden kann. Um zu vermeiden, dass die ursprüngliche Onload-Logik verloren geht, können Sie die ursprüngliche Funktion folgendermaßen dekorieren:

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

Dadurch wird die Funktion ausgeführt, die ursprünglich window.onload zugewiesen wurde, und anschließend // YOUR JQUERY.

Unter https://en.wikipedia.org/wiki/Decorator_pattern finden Sie weitere Informationen zum Dekoratormuster.

3
Kyle McVay

In der Lösung wird erwähnt - "Eine letzte Sache, die Sie überprüfen müssen, ist sicherzustellen, dass Sie keine Plugins laden, bevor Sie jQuery laden. Plugins erweitern das" $ "- Objekt, wenn Sie ein Plugin laden, bevor Sie den jQuery-Core laden Dann erhalten Sie den Fehler, den Sie beschrieben haben. "

Um dies zu vermeiden - 

Viele JavaScript-Bibliotheken verwenden $ als Funktions- oder Variablennamen, genau wie jQuery. Im Fall von jQuery ist $ nur ein Alias ​​für jQuery, daher ist die gesamte Funktionalität ohne Verwendung von $ verfügbar. Wenn Sie neben jQuery eine andere JavaScript-Bibliothek verwenden müssen, können Sie die Kontrolle über $ an die andere Bibliothek zurückgeben, indem Sie $ .noConflict () aufrufen.

2
user1284907

Ich benutze Url.Content und habe nie ein Problem.

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

Platzieren Sie einfach Jquery-URL oben auf Ihrem Jquery-Code

so was--

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

Ich hatte das gleiche Problem und es lag daran, dass mein Verweis auf jQuery.js nicht im Tag enthalten war. Nachdem ich das gewechselt hatte, fing alles an zu arbeiten.

Anthony

1
Anthony

Ich hatte dieses Problem einmal ohne ersichtlichen Grund. Es fand lokal statt, während ich durch den aspnet-Entwicklungsserver lief. Es hatte funktioniert und ich habe alles wieder in einen Zustand versetzt, in dem es zuvor funktioniert hatte und trotzdem nicht funktioniert hat. Ich habe in den Chrome-Debugger geschaut und die Jquery-1.7.1.min.js war ohne Probleme geladen. Es war alles sehr verwirrend. Ich weiß immer noch nicht, was das Problem war, aber den Browser schließen, den Entwicklungsserver schließen und es erneut versuchen.

1
cedd

es scheint, dass das Firebug-Problem gelöst wird, wenn Sie Ihre jquery.js-Dateien im selben Ordner oder in einigen Unterordnern finden, in denen sich Ihre html-Datei befindet. Wenn sich Ihre HTML-Datei beispielsweise unter C:/Ordner1/befindet, sollten sich Ihre Js-Dateien ebenfalls unter C:/Ordner1/(oder C:/Ordner1/Ordner2 usw.) befinden und entsprechend im HTML-Dokument adressiert sein. hoffe das hilft.

0
sc123

Ich hatte ein sehr ähnliches Problem. In meiner C # -VVC-Anwendung wurde JQuery nicht erkannt. Ich musste das @ Scripts.Render ("~/bundles/jquery") vom unteren Rand meiner _Layout.cshtml-Datei zum Kopf des Abschnitts verschieben. Stellen Sie außerdem sicher, dass Sie Jquery als Nuget-Paket erworben haben, wenn Sie Visual Studio verwenden!

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

Ich hatte das gleiche Problem und konnte nicht herausfinden, was es verursachte. Ich habe vor kurzem meine HTML-Dateien von Japanisch in UTF-8 konvertiert, aber mit den Skriptdateien habe ich nichts gemacht. Irgendwie wurde jquery-1.10.2.min.js in diesem Prozess beschädigt (ich habe immer noch keine Ahnung wie). Jquery-1.10.2.min.js wurde durch das Original ersetzt.

0
Gavin

Wenn das script-Tag defer-Attribut hat, wird der Fehler angezeigt  

Nicht abgerufener ReferenceError: $ ist nicht definiert

und muss das Attribut defer aus dem Tag script entfernen  

0
  1. Überprüfen Sie, ob der genaue Pfad Ihrer Jquery-Datei enthalten ist.

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

Wenn Sie dies am Ende Ihrer Seite hinzufügen, rufen Sie bitte alle JS-Funktionen unterhalb dieser Deklaration auf.

  1. Überprüfen Sie mit diesem Code-Test

    <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~!' );
    });
    

Frieden!

0
danielad

In meinem Fall habe ich auf von Google gehostete JQuery verwiesen. Es war richtig enthalten, aber ich war auf einer HTTPS-Seite und rief es über HTTP auf. Nachdem ich das Problem behoben (oder unsichere Inhalte zugelassen hatte), wurde es sofort ausgelöst.

0
Anthony

Es gibt eine Möglichkeit, das Javascript automatisch laden zu lassen, bevor der Rest des Codes ausgeführt wird.

Gehen Sie in Views\Shared _Layout.html und fügen Sie Folgendes hinzu 

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

Wenn Sie jQuery in asp.net verwenden, wenn Sie eine Masterseite verwenden und die Jquery-Quelldatei dort laden, müssen Sie sicherstellen, dass der Header contentplaceholder nach allen Jquery-Skriptreferenzen vorhanden ist. 

Ich hatte ein Problem, bei dem alle Seiten, auf denen diese Masterseite verwendet wurde, '$ ist nicht definiert' zurückgeben, nur weil die falsche Reihenfolge dazu führte, dass der clientseitige Code ausgeführt wurde, bevor das Jquery-Objekt erstellt wurde. So stellen Sie sicher, Sie haben:

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

Auf diese Weise wird der Code der Reihe nach ausgeführt, und Sie können jQuery-Code auf den untergeordneten Seiten ausführen.

0

Wir haben das gleiche Problem .... aber aus Versehen habe ich die Ordnereigenschaften überprüft und etwas eingestellt ...

Sie müssen die Eigenschaften aller Ordner überprüfen, auf die Sie zugreifen.

  1. rechtsklick Ordner
  2. Registerkarte "Berechtigungen"
  3. stellen Sie den Ordnerzugriff ein: BESITZER: Dateien erstellen und löschen GROUP: Zugriff auf Dateien ANDERE: Zugriff auf Dateien

Ich hoffe, dass dies die Lösung ist ......

0

Ich habe das gleiche Problem und kein Problem löst das Problem. Das einzige, was für mich funktioniert, ist in der Site.master-Datei gespeichert, das Nächste:

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

Mit src = "<% = ResolveUrl (" ") ... ist das Laden von jQuery in den Inhaltsseiten korrekt.

0
amelian