JQuery - $ tanımlı değil


486

Basit bir jquery tıklama etkinliğim var

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

ve site.master'da tanımlanan bir jquery başvurusu

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

Komut dosyasının doğru bir şekilde çözüldüğünü kontrol ettim, biçimlendirmeyi görebiliyorum ve komut dosyasını doğrudan firebug'da görüntüleyebiliyorum, bu yüzden bulunmalıyım. Ancak, hala alıyorum:

$ tanımlı değil

ve hiçbir jquery işe yaramaz. Ayrıca $ (belge) .ready ve jQuery vb gibi çeşitli varyasyonları denedim.

Bu .net 3.5 üzerinde bir MVC 2 uygulaması, gerçekten yoğun olduğumdan eminim, google'da her yerde dosyanın doğru bir şekilde kontrol edildiğini, kontrol ettiğim ve tekrar kontrol ettiğimi söylüyor, lütfen tavsiye edin! : /


6
Fiddler aracıyla sayfa yükünü incelerseniz, jquery-1.3.2.js'nin HTTP200 yanıt kodu istediğini ve yüklendiğini gerçekten görüyor musunuz?
naivistler

18
betiğiniz jquery'den önce yürütülüyor mu?
Surya

2
Kaynağı görüntüleyebilir ve js bağlantısını tıklayabilir misiniz? Jquery'niz sayfaya yüklenmemiş gibi görünüyor. Hataları görmek için Firebug Konsol Ekranını deneyin Ayrıca komut dosyası etiketinizde ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js dosyasını da deneyin
nemke

2
Komut dosyanız jquery kaynağı yüklenmeden tetikleniyor mu?
Dave Bacher

1
@ Surya / Dave, şimdi eve gittim, bu yüzden yarın tekrar kontrol edip geri dönüp yazacağım, ama bence bu muhtemelen sorun: / ne kadar utanç verici!
Paul Creasey

Yanıtlar:


560

Bu hataya yalnızca üç şeyden biri neden olabilir:

  1. JavaScript dosyanız sayfanıza düzgün yüklenmiyor
  2. JQuery'nin sınırlı bir sürümüne sahipsiniz. Birisi çekirdek dosyayı düzenlediğinden veya bir eklentinin $ değişkeninin üzerine yazmış olmasından kaynaklanabilir.
  3. Sayfa tamamen yüklenmeden önce ve jQuery tamamen yüklenmeden önce JavaScript'iniz çalışıyor.

Her şeyden önce, hangi komut dosyasının doğru şekilde çağrıldığından emin olun, şöyle görünmelidir

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

ve asenkron veya erteleme özelliklerine sahip olmamalıdır .

Ardından , dosyanın gerçekten düzgün yüklenip yüklenmediğini görmek için Firebug net panelini kontrol etmelisiniz . Değilse, kırmızı renkle vurgulanacak ve yanında "404" yazacaktır. Dosya düzgün yükleniyorsa, sorun 2 numara demektir.

Tüm jQuery javascript kodunun aşağıdaki gibi bir kod bloğu içinde çalıştırıldığından emin olun:

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

Bu, jQuery başlatıldıktan sonra kodunuzun yüklenmesini sağlar .

Kontrol edilecek son bir şey, jQuery'yi yüklemeden önce herhangi bir eklenti yüklemediğinizden emin olmaktır . Eklentiler "$" nesnesini genişletir, bu nedenle jQuery çekirdeğini yüklemeden önce bir eklenti yüklerseniz, açıkladığınız hatayı alırsınız.

Not: Çalıştırmak için jQuery gerektirmeyen bir kod yüklüyorsanız, jQuery hazır işleyicisinin içine yerleştirilmesi gerekmez. Bu kod kullanılarak ayrılabilir document.readyState.


182
Kod bloğunuzla ilgili olarak, $(document)bu ifadeden önce jQuery içeren bir komut dosyası etiketiniz yoksa çalışmaz ...
PatrikAkerstrand

3
Ben OP ile aynı sorunu olduğunu eklemek istiyorum ve benim sorunum https jquery's kütüphane ile kullanma o kadar iyi çalışmıyor oldu.
Mike Cheel

20
(işlev ($) {}) (jQuery);
JackMahoney

2
@Patrik: Görünümdeki komut dosyaları bölümünü kullanan bir çözüm için cevabımı görün. Bu şekilde jquery önce yüklenir ve $ doğru şekilde tanımlanır.
angularsen

1
Senaryoda da zaman uyumsuz olup olmadığını kontrol edin, benim durumumda soruna neyin sebep olduğunu.
Anders

207

Jquery komut dosyası çağrılmadan önce komut dosyası etiketinizi çağırmış olabilirsiniz.

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

Bu $ olarak tanımlanmamış

Komut dosyası etiketinizden önce jquery.js'yi koyun; işe yarayacaktır;)

<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
Bu harika bir yanıt. Denedim ve benim için çalıştı. VS 2013 ve ASP.net kullanıyorum. Asp.net otomatik sayfa yüklenmeden önce nasıl javascript yükleme yapabilir biliyor musunuz veya tüm dosyaları benim javascript bu şekilde başvurmak zorunda mıyım?
Pat

Cevabınıza eklemek için. ASP.net'te Shared_Layout.cshtml `` <head> </head> ''
Pat

@pat ve kodunuzu bir @section Scriptsetiketin içine yazdığınızdan emin olun
Marc

HTTPS'yi kullanmak için lütfen cevabı güncelleyin ve SPI devdocs.io/html/attributes#integrity-attribute
Josh Habdas 5

65

Öncelikle jQuery betiğinin yüklendiğinden emin olmanız gerekir. Bu bir CDN'den veya web sitenizde yerel olabilir. JQuery'i kullanmaya çalışmadan önce bunu yüklemezseniz, jQuery'nin tanımlanmadığını söyleyecektir.

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

Bu, HEAD veya sayfanın altbilgisinde olabilir, diğer jQuery öğelerini çağırmaya çalışmadan önce yüklemeyi unutmayın.

O zaman aşağıdaki iki çözümden birini kullanmanız gerekir

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

veya

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

lütfen birçok kez $ (document) .ready (function () {// code here}); çalışmayacak.


1
"jQuery tanımlanmamış". Ancak sayfa yüklendikten sonra mevcuttur.
Paul Totzke

Bu bir soru ya da bir ifade olup olmadığından emin değilim, ama kullanmaya çalışmadan önce jQuery komut dosyası için çağrı yapmak kontrol ediyorum. Altbilgiye yüklemeniz ve sayfadan daha yüksek şeyler çağırmanız gibi geliyor.
Andrew Killen

Üzgünüm, bunun komut dosyalarını herhangi bir sırayla kullanabileceğiniz bir teknik olduğunu düşündüm. Evet bunu MVC tarzındaki gövde bölümünde kullanıyordum. mycode.js sonra jQuery.js sayfadaki son 2 şeydir.
Paul Totzke

Endişelenme Paul, çözümü 'önce ... yüklemelisin' de içerecek şekilde düzenledim. :)
Andrew Killen

Bu, "Komut dosyalarım doğru sırada, ancak komut dosyaları farklı bir sırada yüklendi" sorununu giderir mi? 4 yıl önce böyle bir şey yaptığımı hatırlıyorum ama hangi sorunun çözüldüğünü hatırlayamıyorum.
Paul Totzke

50

JQuery eklenti çağrısı yanındadır </body>ve komut dosyanız bundan önce yüklenirse, kodunuzu window.onloadolaydan sonra şu şekilde çalıştırmalısınız :

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

'

bu nedenle kodunuz yalnızca tüm öğeler yüklendikten sonra pencere yüklendikten sonra çalışır. Bu noktada, jQuery ( $) tanımlanacaktır.

Bunu kullanırsanız:

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

'

$henüz jQuery yüklenmeden önce denir ve sizin komut konsolda ilk satırda başarısız olur, çünkü şu anda tanımlı değil.


Genellikle window.unload'a bağlanmak için kötü bir fikir. Etkili çalışan tek olay olacak !!!
Rudi Strydom

Not: Yalnızca bir window.onload işlevi atayabileceğinizi unutmayın, eğer ona başka bir işlev atarsanız, önceki yürütülmez.
Bruno Peres

28

Ben sadece aynı şeyi yaptım ve bir sürü

type="text/javacsript"

Bu yüzden yükleniyorlardı, ama neden işe yaramadığına dair başka ipucu yok. Söylemeye gerek yok, düzgün yazım düzeltti.


Moderatör notu : Bu mesajda yazım hatası olan kasıtlı bir noktayı göstermek için. Lütfen yayını “düzeltmek” için düzenlemeyin.
Martijn Pieters

23

Görünüm ve ana mizanpajda bir komut dosyası bölümü kullanın .

Görünümünüzde tanımlanan tüm komut dosyalarınızı, görünümün Komut Dosyaları bölümüne yerleştirin. Bu şekilde, diğer tüm komut dosyaları yüklendikten sonra ana yerleşimin bunu yüklemesini sağlayabilirsiniz. Bu, yeni bir MVC5 web projesi başlatırken varsayılan kurulumdur. Önceki sürümlerden emin değilim.

Görüntüleme / 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>
}

Görüntüleme / Paylaşılan / _Layout.cshtml

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

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

Ana düzen dosyasında komut dosyaları bölümünün en son nasıl görüntülendiğine dikkat edin .


2
Not: Görünüm bölümleri tasarım gereği kısmi görünümlerde desteklenmez.
Adam Naylor

Bu benim düzeltme için yapmak zorunda .... ve ilk etapta @Scripts kullanmak daha iyi bilmeliydim ama bir düzeltme arayana kadar bunu unuttum.
Caverman

12

gerçekten jquery yüklediğinizden emin olun bu jquery değil - bu UI!

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

Bu jquery için doğru bir komut dosyası kaynağıdır:

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

11

Yukarıda belirtildiği gibi, $ değişkeninin çakışması nedeniyle olur.

Bu sorunu, jQuery için ikinci bir değişkeni çakışma olmadan ayırarak çözdüm.

var $j = jQuery.noConflict();

ve sonra her yerde kullanın

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

daha fazla ayrıntıyı burada bulabilirsiniz


8

Bu, jQuery kitaplığınızın henüz yüklenmediği anlamına gelir.

Kodunuzu jQuery kitaplığını çektikten sonra taşıyabilirsiniz.

ya da böyle bir şey kullanabilirsiniz

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

Bu, DOM yüklendikten sonra tetiklenir, ancak kontroller, javascript ve arka planda çalışan diğer programlar yüklendiğinde tetiklenmez. Bunun çalışması için bir zaman gecikmesi kullanılması gerekir.
fandango68


5

bazı testlerden sonra hızlı bir çözüm buldum, dizin sayfanızın üstüne ekleyebilirsiniz:

<script>
$=jQuery;
</script>

çok iyi çalışıyor :)


4
soru şuydu: $ tanımlı değil mi?
Mimouni

Yakalanmayan ReferenceError: jQuery tanımlanmadı
Simon Schnell

Bunu jQuery kütüphane içe aktarma işleminin altına mı koydunuz?
Mike Warren

4

Ben jQuery referans yanlış yazdığımda aynı hata iletisini aldım ve bunun yerine type="text/javascript""... javascirpt" yazdım. ;)


Eureka! Benim gibi benim vardı type="text/css". Aklımı kurtardığın için teşekkürler!
Jeriko

Ben gittim ve yaşadım type="javascript". Onu bulmak 30 dakika boşa.
mason

4

JQuery düzgün yüklenmiyor gibi görünüyor. Hangi kaynağı / sürümü kullanıyorsunuz?

Alternatif olarak, bir ad alanı çarpışması olabilir, bu nedenle kullanmak yerine jQuery'yi açıkça kullanmayı deneyin $. Bu işe yararsa, kullanılan noConflictdiğer kodun bozulmadığından emin olmak için kullanmak isteyebilirsiniz $.


3

Bu hata, jQuery'nin sayfaya henüz yüklenmediği anlamına gelir. Kullanarak $(document).ready(...)ya da herhangi bir varyantı bir iyi gelecek olarak $jQuery fonksiyonudur.

window.onloadBurada kullanmak gerekir. Yalnızca bir işlevin atanabileceğini unutmayın window.onload. Orijinal yükleme yükü mantığını kaybetmemek için orijinal işlevi şu şekilde dekore edebilirsiniz:

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

Bu, başlangıçta atanmış olan işlevi yürütür window.onloadve sonra yürütür // YOUR JQUERY.

Dekoratör deseni hakkında daha fazla bilgi için https://en.wikipedia.org/wiki/Decorator_pattern adresine bakın .


2

Kullandığım Url.Content ve bir sorun olmadı.

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

2

Çözümde - "Kontrol etmek için son bir şey, jQuery yüklemeden önce herhangi bir eklenti yüklemediğinizden emin olmaktır. Eklentiler" $ "nesnesini genişletir, bu nedenle jQuery çekirdeğini yüklemeden önce bir eklenti yüklerseniz, Açıkladığınız hatayı alırsınız. "

Bundan kaçınmak için -

Birçok JavaScript kitaplığı, jQuery gibi $ veya işlev adı olarak kullanır. JQuery'nin durumunda, $ sadece jQuery için bir takma addır, bu nedenle tüm işlevler $ kullanmadan kullanılabilir. JQuery ile birlikte başka bir JavaScript kitaplığı kullanmamız gerekiyorsa, $ .noConflict () çağrısıyla $ kontrolünü diğer kitaplığa geri döndürebiliriz:


1

Belirgin bir sebep olmadan bu problemi bir kez yaşadım. Ben aspnet geliştirme sunucusu ile çalışırken yerel olarak oluyor. Çalışıyordu ve her şeyi daha önce çalıştığı bir duruma geri döndürdüm ve hala işe yaramadı. Krom hata ayıklayıcısına baktım ve jquery-1.7.1.min.js sorunsuz bir şekilde yüklendi. Her şey çok kafa karıştırıcıydı. Hala sorunun ne olduğunu bilmiyorum ama tarayıcıyı kapatmak, geliştirme sunucusunu kapatmak ve sonra tekrar denemek.


1

Jquery URL'sini jquery kodunuzun üstüne yerleştirmeniz yeterlidir

bunun gibi--

<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

Aynı sorun vardı ve çünkü jQuery.js benim referans etiketinde değildi. Bunu değiştirdiğimde her şey çalışmaya başladı.

Anthony


1
  1. Jquery dosyanızın tam yolunun dahil edildiğini kontrol edin.

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

bunu sayfanızın altına eklerseniz, lütfen bu bildirimin altındaki tüm çağrı JS işlevi.

  1. Bu kod testini kullanarak kontrol edin,

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

Barış!


0

Biz aynı sorunu var .... ama yanlışlıkla klasör özelliklerini kontrol ve bir şey ayarlamak ...

Eriştiğiniz her bir klasörün özelliklerini kontrol etmelisiniz.

  1. sağ tıklama klasörü
  2. 'izinler' sekmesi
  3. klasör erişimini ayarlama: SAHİP: dosya oluştur ve sil GRUP: dosyalara eriş DİĞER: dosyalara eriş

Umarım çözüm budur ......


0

Asp.net'te jQuery kullanırken, bir ana sayfa kullanıyorsanız ve jquery kaynak dosyasını oraya yüklüyorsanız, tüm jquery komut dosyası başvurularından sonra üstbilgi içerik tutucusuna sahip olduğunuzdan emin olun.

Ben sadece yanlış sipariş jquery nesnesi oluşturulmadan önce istemci tarafı kodu çalıştırmak yapmak çünkü bu ana sayfa kullanılan herhangi bir sayfa '$ tanımlanmadı' dönecek bir sorun vardı. Bu yüzden şunlara sahip olduğunuzdan emin olun:

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

Bu şekilde kod sırayla çalışır ve alt sayfalarda jQuery kodunu çalıştırabilirsiniz.


0

Benim durumumda Google'ın barındırdığı JQuery'yi işaret ediyordum. Düzgün dahil edildi, ancak bir HTTPS sayfasındaydım ve HTTP ile çağırıyorum. Sorunu giderdikten sonra (veya güvensiz içeriğe izin verdim), hemen ateşledi.


0

Aynı sorunu yaşıyordum ve neye sebep olduğunu bulamadım. Son zamanlarda HTML dosyalarımı Japonca'dan UTF-8'e dönüştürdüm, ancak komut dosyası dosyalarıyla hiçbir şey yapmadım. Her nasılsa jquery-1.10.2.min.js bu süreçte bozuldu (hala nasıl olduğu hakkında hiçbir fikrim yok). Jquery-1.10.2.min.js dosyasını orijinali ile değiştirmek düzeltti.


0

jquery.js dosyalarınızı aynı klasör altında veya html dosyanızın bulunduğu bazı alt klasörlerde bulursanız, Firebug sorunu çözülmüştür. Örneğin, html'niz C: / klasör1 / altındaysa, js dosyalarınız da C: / klasör1 / (veya C: / klasör1 / klasör2 vb.) altında olmalı ve html belgesinde buna göre ele alınmalıdır. Bu yardımcı olur umarım.


0

Ben de aynı sorunu var ve hiçbir durumda bana sorunu çözmek. Benim için çalışan tek şey, Site.master dosyasının üzerine konur, bir sonraki:

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

Src = "<% = ResolveUrl (" ") ... ile jQuery'nin İçerik Sayfalarındaki yükü doğru.


0

Çok benzer bir sorun yaşadım. Benim C # MVC uygulamasında, JQuery tanınmadı. @ Scripts.Render ("~ / bundles / jquery") _Layout.cshtml dosyasının altından bölümün başına taşımak gerekiyordu. Visual studio kullanıyorsanız Jquery'yi Nuget paketi olarak aldığınızdan da emin olun!

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

0

Kodun geri kalanı çalışmadan önce otomatik olarak javascript yüklemek için bir yol var.

Views \ Shared_Layout.html dosyasına gidin ve aşağıdakileri ekleyin

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

0

eğer scriptetiket vardır deferniteliğini hatayı göstermek

Yakalanmayan ReferenceError: $ tanımlanmamış

ve niteliğini kaldırmalısınız defergelen scriptetiketi


0

Bu sorunu çözmek için sık karşılaşılan bir konudur.

  1. Ana Jquery Kütüphanesini Dahil Et
  2. Çapraz Tarayıcı Sorununu Kontrol Edin
  3. Jquery kodunun üstüne Kitaplık ekle
  4. CDN'lerin engellenip engellenmediğini kontrol edin.

Tüm detaylar bu blogda verilmiştir buraya tıklayın

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.