JQuery – $ is niet gedefinieerd

Ik heb een eenvoudige jQuery-klikgebeurtenis

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

en een jQuery-referentie gedefinieerd in de site.master

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

Ik heb gecontroleerd of het script correct wordt opgelost, ik kan de opmaak zien en het script rechtstreeks in firebug bekijken, dus ik moet gevonden worden. Ik krijg echter nog steeds:

$ is niet gedefinieerd

en geen van de jQuery werkt. Ik heb ook de verschillende varianten hiervan geprobeerd, zoals $(document).readyen jQuery enz.

Het is een MVC 2-app op .net 3.5, ik weet zeker dat ik erg compact ben, overal op google zegt om te controleren of het bestand correct wordt verwezen, wat ik heb gecontroleerd en opnieuw gecontroleerd, gelieve te adviseren! :/


Antwoord 1, autoriteit 100%

Die fout kan slechts door een van de volgende drie dingen worden veroorzaakt:

  1. Uw JavaScript-bestand wordt niet correct op uw pagina geladen
  2. Je hebt een mislukte versie van jQuery. Dit kan gebeuren omdat iemand het kernbestand heeft bewerkt, of een plug-in heeft mogelijk de variabele $ overschreven.
  3. JavaScript draait voordat de pagina volledig is geladen, en dus voordat jQuery volledig is geladen.

Zorg er allereerst voor dat welk script correct wordt aangeroepen, het eruit zou moeten zien

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

en mag geen attributen async of uitstellen .

Dan moet u de Firebug net paneel om te zien of het bestand eigenlijk is goed geladen. Zo niet, dan wordt het rood gemarkeerd en zal het “404” hierna zeggen. Als het bestand goed wordt geladen, betekent dit dat het probleem nummer 2 is.

Zorg ervoor dat alle JQuery JavaScript-code in een codeblok wordt uitgevoerd, zoals:

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

Hiervoor zorgt u ervoor dat uw code na jQuery is geïnitialiseerd.

Eén laatste ding om te controleren, is om ervoor te zorgen dat u geen plug-ins vóór laadt die jQuery laadt. Plug-ins verlengen het object “$”, dus als u een plug-in laadt voordat u jQuery-kern laadt, krijgt u de fout die u hebt beschreven.

Opmerking: Als u code laadt die geen jQuery nodig heeft om te worden uitgevoerd, hoeft u niet in de JQuery Ready-handler te worden geplaatst. Die code kan worden gescheiden met document.readyState.


Antwoord 2, Autoriteit 36%

Het kan zijn dat u uw scripttag hebt gebeld voordat het jQuery-script wordt genoemd.

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

Dit resulteert in $ is niet gedefinieerd

Zet de jquery.js voor je scripttag en het zal werken 😉 zoals zo:

<script src="https://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>

Antwoord 3, autoriteit 12%

Eerst moet u ervoor zorgen dat het jQuery-script is geladen. Dit kan afkomstig zijn van een CDN of lokaal op uw website. Als u dit niet eerst laadt voordat u jQuery probeert te gebruiken, zal het u vertellen dat jQuery niet is gedefinieerd.

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

Dit kan in de HEAD of in de footer van de pagina staan, zorg er gewoon voor dat u deze laadt voordat u andere jQuery-dingen probeert aan te roepen.

Dan moet u een van de twee onderstaande oplossingen gebruiken

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

of

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

Houd er rekening mee dat $(document).ready(function(){//code here});vaak niet zal werken.


Antwoord 4, autoriteit 9%

Als de JQuery Plugin-oproep naast de </body>is, en uw script is geladen voordat, moet u uw code uitvoeren na window.onloadevenement, zoals dit:

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

`

Dus, uw code wordt alleen uitgevoerd nadat de vensterbelasting is, wanneer alle activa zijn geladen. Op dat moment wordt de jQuery ($) gedefinieerd.

Als u dat gebruikt:

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

`

De $is nog niet gedefinieerd op dit moment, omdat het wordt gebeld voordat de jQuery is geladen en uw script faalt op die eerste regel op de console.


Antwoord 5, Autoriteit 5%

Ik heb net hetzelfde gedaan en vond dat ik heel veel

had

type="text/javacsript"

Dus ze laden, maar geen verdere hint over waarom het niet werkte. Onnodig te zeggen dat de juiste spelling het heeft opgelost.


Antwoord 6, Autoriteit 4%

Gebruik een scripts sectie in de weergave en master-lay-out.

Zet al uw scripts die zijn gedefinieerd in uw weergave in een sectie van het scripts van de weergave. Op deze manier kunt u de master lay-out dit laten laden nadat alle andere scripts zijn geladen. Dit is de standaardinstelling bij het starten van een nieuw MVC5-webproject. Niet zeker van eerdere versies.

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

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

Merk op hoe de sectie scriptsals laatste wordt weergegeven in het hoofdlay-outbestand.


Antwoord 7, autoriteit 2%

Zoals hierboven vermeld, gebeurt dit vanwege het conflict van $ variabele.

Ik heb dit probleem opgelost door een secundaire variabele te reserveren voor jQuery zonder conflict.

var $j = jQuery.noConflict();

en gebruik het dan overal

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

meer details vindt u hier


Antwoord 8, autoriteit 2%

zorg ervoor dat je jQuery echt laadt
dit is nietjQuery – het is de ui!

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

Dit is een correcte scriptbron voor jQuery:

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

Antwoord 9

Het betekent dat uw jQuery-bibliotheek nog niet is geladen.

Je kunt je code verplaatsen nadat je de jQuery-bibliotheek hebt opgehaald.

of je kunt zoiets gebruiken

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

Antwoord 10

Gebruikt u andere JavaScript-bibliotheken? Als dit het geval is, moet u waarschijnlijk jQuery in de compatibiliteitsmodus gebruiken:

http://docs.jquery.com/Using_jQuery_with_Other_Libraries


Antwoord 11

na wat testen vond ik een snelle oplossing,
u kunt bovenaan uw indexpagina toevoegen:

<script>
$=jQuery;
</script>

het werkt heel goed 🙂


Antwoord 12

Ik kreeg dezelfde foutmelding toen ik de jQuery-referentie verkeerd spelde en in plaats van type="text/javascript"typte ik “…javascirpt”. 😉


Antwoord 13

Het lijkt erop dat jQuery niet goed wordt geladen. Welke bron/versie gebruik je?

Het kan ook een naamruimte-botsing zijn, dus probeer jQuery expliciet te gebruiken in plaats van $. Als dat werkt, kun je noConflictgebruiken om ervoor te zorgen dat de andere code die $gebruikt, niet kapot gaat.


Antwoord 14

Ik had hetzelfde probleem en heb het opgelost met

document.addEventListener('DOMContentLoaded', () => {
 // code here
});

Antwoord 15

Die fout betekent dat jQuery nog niet op de pagina is geladen. Het gebruik van $(document).ready(...)of een variant daarvan heeft geen zin, aangezien $de jQuery-functie is.

Het gebruik van window.onloadzou hier moeten werken. Merk op dat er slechts één functie kan worden toegewezen aan window.onload. Om te voorkomen dat je de originele onload-logica verliest, kun je de originele functie als volgt decoreren:

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

Hiermee wordt de functie uitgevoerd die oorspronkelijk was toegewezen aan window.onload, en vervolgens // YOUR JQUERY.

Zie https://en.wikipedia.org/wiki/Decorator_patternvoor meer informatie over het decorateurpatroon.


Antwoord 16

Ik gebruik Url.Contenten heb nooit een probleem.

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

Antwoord 17

In de oplossing wordt genoemd –
“Een laatste ding om te controleren is om ervoor te zorgen dat u geen plug-ins laadt voordat u jQuery laadt. Plug-ins breiden het “$” -object uit, dus als u een plug-in laadt voordat u jQuery core laadt, krijgt u de door u beschreven fout .”

Om dit te vermijden –

Veel JavaScript-bibliotheken gebruiken $ als een functie- of variabelenaam, net zoals jQuery dat doet. In het geval van jQuery is $ slechts een alias voor jQuery, dus alle functionaliteit is beschikbaar zonder $ te gebruiken. Als we naast jQuery een andere JavaScript-bibliotheek moeten gebruiken, kunnen we de controle over $ teruggeven aan de andere bibliotheek met een aanroep van $.noConflict():


Antwoord 18

Ik heb dit probleem een keer gehad zonder duidelijke reden. Het gebeurde lokaal terwijl ik door de aspnet-ontwikkelingsserver liep. Het had gewerkt en ik bracht alles terug naar een staat waarin het eerder had gewerkt en nog steeds werkte het niet. Ik keek in de chrome debugger en de jQuery-1.7.1.min.js was zonder problemen geladen. Het was allemaal erg verwarrend. Ik weet nog steeds niet wat het probleem was, maar het sluiten van de browser, het sluiten van de ontwikkelserver en het opnieuw proberen om het op te lossen.


Antwoord 19

Plaats de jQuery-URL bovenaan uw jQuery-code

zoals dit–

<script src="<%=ResolveUrl("~/Scripts/jquery-1.3.2.js")%>" type="text/javascript"></script>
<script type="text/javascript">
    $(function() {
        $('#post').click(function() {
            alert("test"); 
        });
    });
</script>

Antwoord 20

Ik had hetzelfde probleem en dat kwam omdat mijn verwijzing naar jQuery.js niet in de tag stond. Toen ik dat veranderde, begon alles te werken.

Anthony


Antwoord 21

  1. Controleer of het exacte pad van uw jQuery-bestand is opgenomen.

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

als u dit onderaan uw pagina toevoegt, roept u allen de JS-functie onder deze verklaring aan.

  1. Controleer met deze codetest ,

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

Vrede!


Antwoord 22

We hebben hetzelfde probleem….maar per ongeluk heb ik de mapeigenschappen gecontroleerd en iets ingesteld…

Je moet de eigenschappen controleren van elke map die je opent..

  1. map met rechtermuisknop
  2. tabblad ‘rechten’
  3. stel de maptoegang in:
    EIGENAAR: bestanden maken en verwijderen
    GROEP: toegang tot bestanden
    ANDERE: toegang tot bestanden

Ik hoop dat dit de oplossing is……


Antwoord 23

Als je jQuery gebruikt in asp.net, als je een hoofdpagina gebruikt en je laadt het jQuery-bronbestand daar, zorg er dan voor dat je de header contentplaceholder hebt na alle jQuery-scriptreferenties.

Ik had een probleem waarbij pagina’s die die basispagina gebruikten ‘$ is niet gedefinieerd’ teruggaven, simpelweg omdat de verkeerde volgorde ervoor zorgde dat de code aan de clientzijde werd uitgevoerd voordat het jQuery-object werd gemaakt. Zorg er dus voor dat u:

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

Op die manier wordt de code op volgorde uitgevoerd en kunt u jQuery-code uitvoeren op de onderliggende pagina’s.


Antwoord 24

In mijn geval wijst ik naar Google gehost jQuery. Het was goed opgenomen, maar ik was op een HTTPS-pagina en belde het via http. Zodra ik het probleem heb opgelost (of toegestaan ​​onveilige inhoud), heeft het recht omhoog.


Antwoord 25

Nadat ik alles hier zonder resultaat heb geprobeerd, heb ik het probleem opgelost door het script SRC-tag van het lichaam naar head te verplaatsen


Antwoord 26

Ik had hetzelfde probleem en kon niet achterhalen wat het veroorzaakte. Ik heb onlangs mijn HTML-bestanden van Japans tot UTF-8 geconverteerd, maar ik heb niets met de scriptbestanden gedaan. Op de een of andere manier raakte jQuery-1.10.2.min.js gecorrumpeerd in dit proces (ik heb nog steeds geen idee hoe). Het vervangen van jQuery-1.10.2.min.js met het origineel vastgesteld.


Antwoord 27

Het lijkt erop dat als u uw jQuery.js-bestanden onder dezelfde map of in sommige submappen zoekt waar uw HTML-bestand is, het probleem met de brandbug is opgelost. Als uw HTML bij C: / Folder1 /, dan moeten uw JS-bestanden ergens onder C zijn: / map1 / (of C: / map1 / map2 enz.) Ook) en overeenkomstig in de HTML-doc. Ik hoop dat dit helpt.


Antwoord 28

Ik heb hetzelfde probleem en geen case los me het probleem op. Het enige dat voor mij werkt, het wordt op het van het site-bestanden geplaatst, de volgende:

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

Met SRC = “& LT;% = Reslaceurl (” “) … De lading van jQuery in de inhoudspagina’s is correct.


Antwoord 29

Ik had een vergelijkbaar probleem. In mijn C# MVC-toepassing werd JQuery niet herkend. Ik moest de @Scripts.Render(“~/bundles/jquery”) van de onderkant van mijn _Layout.cshtml-bestand naar de kop van de sectie verplaatsen. Zorg er ook voor dat je JQuery als een Nuget-pakket hebt gepakt als je Visual Studio gebruikt!

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

Antwoord 30

Er is een manier om Javascript automatisch te laten laden voordat de rest van de code wordt uitgevoerd.

Ga naar Views\Shared_Layout.html en voeg het volgende toe

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

Other episodes