Yakalanmamış TypeError: undefined, jquery-min.js yüklemede bir işlev değildir


104

Yaklaşık beş CSS dosyası ve on Javascript dosyası yüklememi gerektiren normal bir web sayfası oluşturuyorum.

  • Bunları HTML sayfasında ayrı ayrı yüklerken, web sayfam sorunsuz bir şekilde yükleniyor.
  • Şimdi üretim için, tüm Javascript'i gereken sırayla tek bir dosyaya ve tüm CSS'yi başka bir dosyaya birleştirdim. Ancak web sayfasını birleştirilmiş dosyalarla çalıştırmayı denediğimde şunu söyleyen bir hata veriyor:

    Uncaught TypeError: undefined is not a function

Birleştirilmiş Javascript dosyasında jquery.min.js'nin yüklendiği satırda.

Bunu azaltmak için ne yapabilirim? Tüm dosyaları birleştirmek ve üretim için küçültmek istiyorum. Lütfen yardım et.


DÜZENLEME: Javascript ve CSS'yi, ayrı ayrı yüklendikleri ve iyi çalıştıkları sırayla birleştirdim.


5
Gösterecek undefinedkodunuz yoksa ne olduğunu nasıl bilebiliriz ?
Joseph

tanımsız, yükleniyor jquery-1.6.1.min.js'de geliyor. belki jquery düzgün yüklenmiyor veya başka bir şey?
ghostCoder

belki yüksek rütbeli cevabı kabul edersiniz?
Allisone

Yanıtlar:


179

Bu sorunun hala çözülmediğini varsayarsak, birçok bağımsız dosya kodlarını noktalı virgülle bitirmez. Çoğu jQuery komut dosyası ile biter (jQuery)ve sahip olmanız gerekir (jQuery);.

Ayrı dosyalar olarak komut dosyası iyi yüklenir, ancak tek bir dosya olarak noktalı virgüllere ihtiyacınız vardır.


18
+1. JavaScript kodunu birleştirirken, bunlara her zaman noktalı virgüllerle katılmalısınız. Bunların çoğu hala geçerlidir, ancak daha az hataya yol açar.
Bergi

9
Hata ayıklamak inanılmaz derecede zor. Gerçekten etkili bir cevap için teşekkürler!
ghayes

5
Görünüşe göre Bootstrap'ın js'si böyle bir örnek. Bunun için teşekkürler! O gerçek bir erişte kaşıyıcısıydı.
Kevin Beal

Youtube iframe API'sini içe aktarmaya çalışıyorum ve noktalı virgülle bitmiyor ve bu hatayı alıyorum. Onu hiçbir şeyle birleştirmiyorum ... jQuery.getScript () ile yüklüyorum. Öyleyse ... Benim hatama neden olan bu olabilir mi? Yoksa bu mantıklı değil mi?
Daniel

1
Bir kitaplıkla çalışırken bu hatayı görürsek, bunu nasıl çözeriz? 2.3.2 / js / bootstrap.min.js ve /1.4.6/bootstrap-editable/js/bootstrap-editable.min.js
codeObserver

28

Dosyaları birleştirdiğiniz sırayı yeniden kontrol etmeniz gerekebilir, aşağıdaki gibi bir şey olmalıdır:

  1. jquery.min.js
  2. jquery-ui.js
  3. yüklediğiniz herhangi bir üçüncü taraf eklentisi
  4. özel JS'niz

bu sadece json2.js, jquery-1.6.1.min.js, jquery eklentileri, benim kodum gibi. bu sırayla.
ghostCoder

json2.js herhangi bir jquery işlevi kullanıyorsa, jquery.min.js ilk olmalıdır. öneririm. jquery.min.js, jqueryPlugins, json2.js, kodum.
Bilal Murtaza


16

JQuery'nin farklı sürümlerine iki başvuruda bulunmaktan aynı hatayı aldım.

Ana sayfamda:

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

Ve ayrıca sayfada:

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

7

Son zamanlarda jQuery Validation eklentisinde Squishit kullanarak bu sorunu yaşadım ve ayrıca js hatası alıyorum:

"tanımsız bir işlev değildir"

Jquery.validate.min.js yerine , küçültülmemiş jquery.validate.js dosyasına başvuruyu değiştirerek bunu düzelttim.

@MvcHtmlString.Create(
    @SquishIt.Framework.Bundle.JavaScript()
        .Add("~/Scripts/Libraries/jquery-1.8.2.min.js")
        .Add("~/Scripts/Libraries/jquery-ui-1.9.1.custom.min.js")
        .Add("~/Scripts/Libraries/jquery.unobtrusive-ajax.min.js")
        .Add("~/Scripts/Libraries/jquery.validate.js")
        .Add("~/Scripts/Libraries/jquery.validate.unobtrusive.js")
         ... more files

Bence bazı dosyaların küçültülmüş sürümleri, örneğin Squishit kullanılarak daha fazla sıkıştırıldığında, @Dustin'in önerdiği gibi bazı durumlarda eksik noktalı virgül ve benzerleriyle ilgilenmeyebilir, bu nedenle hangi dosyaları deneyebilirsiniz? iki kat sıkıştırın ve bunu Squishit'e veya paketlediğiniz her şeye bırakın.


Küçültülmemiş sürümü kullanmak benim için sadece bilet oldu - teşekkürler.
Paul Deen

Benim için soruna neden olan, NuGet paketinin 1.0.2 sürümündeki json2.min.js dosyasıydı. Min olmayan dosyaya geçtim ve Squishit birleşik dosya şimdi iyi çalışıyor.
billoreid

6

Hala bunu düzeltemeyenler için, jQuery kullanırken 'this' i '$ (this)' olarak değiştirerek yaptım.

ÖRNEĞİN:

$('.icon').click(function() {
    this.fadeOut();
});

Sabit:

$('.icon').click(function() {
    $(this).fadeOut();
});

5

Değişkeni yanlışlıkla aynı isimle işlev olarak adlandırdığımda da aynı sorunla karşılaştım.

Yani bu:

isLive = isLive(data);

başarısız, OP'nin belirtilen hata mesajı üretiliyor.

Bunu düzeltmek, yukarıdaki satırı şu şekilde değiştirmek kadar basitti:

isItALive = isLive(data);

Bu durumda ne kadar yardımcı olur bilmiyorum ama benzer problemlere çözüm arayan diğerlerine bu cevabı vermeye karar verdim.


5

Evet, js kitaplıklarında küçültülmemiş olarak değiştirilmesini de düzelttim.

Örneğin, etikette şunu değiştirin:

<script type="text/javascript" src="js/jquery.ui.core.min.js"></script>
<script type="text/javascript" src="js/jquery.ui.widget.min.js"></script>
<script type="text/javascript" src="js/jquery.ui.rcarousel.min.js"></script>

İçin:

<script type="text/javascript" src="js/jquery.ui.core.js"></script>
<script type="text/javascript" src="js/jquery.ui.widget.js"></script>
<script type="text/javascript" src="js/jquery.ui.rcarousel.js"></script>

"Min" i küçültülmemiş olarak çıkmak.

Fikir için teşekkürler.


3

Unutmayın: Javascript işlevleri CASE SENSITIVE'dır.

Kodumun sorunsuz çalışacağından oldukça emin olduğum bir durum yaşadım. Ama yine de bir hata aldım ve ne olduğunu kontrol etmek için Google Chrome'un Javascript konsolunu kontrol ettim .

Benim hata satırım

opt.SetAttribute("value",values[a]);

Ve aynı hata mesajını aldım:

Uncaught TypeError: undefined is not a function

Yukarıdaki kodda hiçbir sorun görünmüyor ama çalışmıyordu. Neredeyse bir saat boyunca sorun gideriyorum ve ardından diğer çalışan kodumla karşılaştırdım. Benim hatam, ayarlanması SetAttributegerektiğidir setAttribute.


2

Benim gibi salakların olması durumunda, bu sinir bozucu problemi yaşadım çünkü basit bir

new

yeni bir nesneyi somutlaştırmadan önce anahtar sözcük.


1

Aşağıdaki kodla aynı mesajı aldım (IcedCoffeeScript'te):

f = (err,cb) ->
  cb null, true

await f defer err, res
console.log err if err  

Bu bana normal ICS kodu gibi geldi. Bekle-erteleme yapısını normal CoffeeScript'e açtım:

f (err,res) ->
  console.log err if err

Gerçekte olan şey, derleyicinin doğru bir şekilde bildirdiği f, etkin bir şekilde cbiçinde ayarlanmayan iki parametre bekleyerek 1 geri arama işlevini (2 parametreli) geçmeye çalışmamdı .fundefined is not a function

Hata, geri arama tarzı standart kodu körü körüne yapıştırdığım için oldu. fbir errparametreye ihtiyaç duymaz , bu nedenle basitçe şöyle olmalıdır:

f = (cb) ->
  cb null, true
f (err,res) ->
  console.log err if err

Genel durumda, eşleşen bölgeler için işlev imzalarını ve çağrıları iki kez kontrol etmenizi öneririm. Hata mesajındaki çağrı yığını, yardımcı ipuçları sağlayabilmelidir.

Özel durumunuzda, birleştirilmiş dosyada farklı imzalarla iki kez görünen işlev tanımlarını veya işlevleri tutan global değişkenlere atamaları aramanızı öneririm.


1

Yorum yaptığınızdan emin olun. Bazen kopyalayıp yapıştırırken "/ *!"

Ayrıca konsola girdiğinizde, hatalarınızı listelerler ve her seferinde bir tane almalısınız. "Yakalanmamış SyntaxError: Beklenmeyen belirteç *" görürseniz Bu, js dosyanızı okuduğu ve ilk satırı geçmediği anlamına gelebilir.

/ *! * jquery.tools 1.1.2 - Web için eksik UI kitaplığı * * [tools.tabs-1.0.4, tools.tooltip-1.1.2, tools.scrollable-1.1.2, tools.overlay-1.1.2, tools.expose-1.0.5] * * Telif Hakkı (c) 2009 Tero Piirainen * http://flowplayer.org/tools/ * Oluşturulan dosya: Çarşamba Ekim 07 09:40:16 GMT 2009 * /


0

Bir jquery işlevine yanlışlıkla çok fazla parametre geçtiğimde, yalnızca bir geri arama parametresi beklediğimde bunu aldım.

Diğer sorun giderme işlemleri için: Ekstra parametreler için tüm jquery işlevi çağrılarınızı kontrol ettiğinizden emin olun.

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.