591 Stimmen

JQuery - $ ist nicht definiert

Ich habe eine einfache Jquery-Klick-Ereignis

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

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

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

Ich habe überprüft, dass das Skript korrekt aufgelöst wird, ich kann das Markup sehen und das Skript direkt in Firebug anzeigen, also muss ich gefunden werden. Allerdings bin ich immer noch bekommen:

$ ist nicht definiert

und keine der Jquery funktioniert. Ich habe auch versucht, die verschiedenen Variationen von diesem wie $(document).ready und jQuery usw.

Es ist ein MVC 2 app auf .net 3.5, ich bin sicher, ich bin wirklich dumm, überall auf Google sagt zu überprüfen, die Datei korrekt referenziert wird, die ich überprüft habe und wieder überprüft, bitte beraten! :/

675voto

Mike Trpcic Punkte 24627

Dieser Fehler kann nur durch eine der drei folgenden Ursachen verursacht werden:

  1. Ihre JavaScript-Datei wird nicht richtig in Ihre Seite geladen
  2. Sie haben eine verpfuschte Version von jQuery. Dies könnte passieren, weil jemand die Kerndatei bearbeitet hat oder ein Plugin die $-Variable überschrieben haben könnte.
  3. Sie führen JavaScript aus, bevor die Seite vollständig geladen ist, und damit auch, bevor jQuery vollständig geladen ist.

Vergewissern Sie sich zunächst, dass das Skript richtig aufgerufen wird. Es sollte wie folgt aussehen

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

und sollte keine Attribute haben asynchron ou aufschieben. .

Dann sollten Sie die Firebug Netz um zu sehen, ob die Datei tatsächlich richtig geladen wird. Ist dies nicht der Fall, wird sie rot hervorgehoben und daneben steht "404". Wenn die Datei ordnungsgemäß geladen wird, bedeutet dies, dass das Problem Nummer 2 ist.

Stellen Sie sicher, dass der gesamte jQuery-Javascript-Code innerhalb eines Code-Blocks wie z. B. ausgeführt wird:

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

Damit wird sichergestellt, dass Ihr Code geladen wird après jQuery wurde initialisiert.

Abschließend sollten Sie sicherstellen, dass Sie keine Plugins laden vor laden Sie jQuery. Plugins erweitern das "$"-Objekt, so dass, wenn Sie ein Plugin vor dem Laden jQuery Kern laden, dann erhalten Sie den Fehler Sie beschrieben.

Note : Wenn Sie Code laden, der keine jQuery-Ausführung erfordert, muss er nicht innerhalb des jQuery-Ready-Handlers platziert werden. Dieser Code kann mit document.readyState .

237voto

Hanky Panky Punkte 2259

Es könnte sein, dass Sie Ihr Skript-Tag vor dem Aufruf des Jquery-Skripts aufgerufen haben.

<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

Setzen Sie die jquery.js vor Ihr Skript-Tag und es wird funktionieren ;) wie so:

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

84voto

Andrew Killen Punkte 1684

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

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

Dies könnte im HEAD oder in der Fußzeile der Seite sein, stellen Sie einfach sicher, dass Sie es laden, bevor Sie versuchen, andere jQuery Sachen 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); 

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

Bitte beachten Sie, dass in vielen Fällen $(document).ready(function(){//code here}); wird nicht funktionieren.

68voto

dandapereira Punkte 677

Wenn der jQuery-Plugin-Aufruf neben dem </body> und Ihr Skript davor geladen wird, sollten Sie Ihren Code nach window.onload Ereignis, etwa so:

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

`

Ihr Code wird also erst nach dem Laden des Fensters ausgeführt, wenn alle Elemente geladen wurden. Zu diesem Zeitpunkt wird die jQuery ( $ ) definiert werden.

Wenn Sie das verwenden:

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

`

die $ ist zu diesem Zeitpunkt noch nicht definiert, da es aufgerufen wird, bevor jQuery geladen wird, und Ihr Skript wird bei dieser ersten Zeile auf der Konsole fehlschlagen.

30voto

George R Punkte 3504

Ich habe gerade dasselbe getan und festgestellt, dass ich eine ganze Reihe von

type="text/javacsript"

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X