TypeError: 'undefined' bir işlev değil ('$ (document)' olarak değerlendirilir)


139
  1. Bir WordPress sitesi kullanıyorum.
  2. Bu komut dosyasını başlığa ekliyorum.

Komut dosyası yüklendiğinde, bu hatayı alıyorum:

TypeError: 'undefined' bir işlev değil ('$ (document)' olarak değerlendirilir)

Neye sebep olduğu ve hatta ne anlama geldiği hakkında hiçbir fikrim yok.

Firebug'da şunu alıyorum:

$ bir işlev değil


4
Özel komut dosyanızdan önce jQuery libary'yi eklediğinizden ve NetFirebug sekmesinde hata olmadığından emin olun (jQuery'nin gerçekten yüklendiğinden emin olun).
wsanville

... evet, elbette jQuery önceden yükleniyor. Bunun bir WordPress enque sorunu olduğundan eminim.
dcolumbus

Yanıtlar:


239

Wordpress varsayılan olarak jQuery'yi noConflict modunda kullanır . jQueryDeğişken adı olarak kullanmanız gerekir $; örneğin,

jQuery(document);

onun yerine

$(document);

Bunu $jQuery'ye tekrar atıfta bulunan (ve küresel ad alanını da kirletmekten kaçınan) kendi kendini yürütme işlevinde kolayca tamamlayabilirsiniz , örn.

(function ($) {
   $(document);
}(jQuery));

5
Komut dosyası gerekli değildir; istediğiniz yer jQuery(document)yerine sadece arayabilirsiniz $(document). $Bunun yerine kullanmak istiyorsanız , yukarıdaki komut dosyası yalnızca bir argüman alan bir işlev oluşturur ve $bunu iletir jQuery; Kısacası, fonksiyon içinde, $beklediğiniz gibi jQuery'yi gösterir.
El Yobo

2
Aslýnda, yaptýđým ţey benim normal $(document).ready(function() { // code });yerine senin $(document);... ... bir cazibe gibi çalýţtý.
dcolumbus

1
Evet, ben bunu önerdim - "fonksiyon içinde $ beklediğiniz gibi jQuery işaret eder".
El Yobo

Size bu şekilde birkaç karakter kazandırır :) Kendini yürütme ifadesinin! Function () {} () formu hakkında daha fazla bilgi .
El Yobo

Eski @ElYobo olduğunu biliyorum, ancak sanırım yayınınızı düzenleyebilir ve ilk yorumunuzdaki örneği ikinci bir örnek olarak yanıta ekleyebilirsiniz. Bana zaman
kazandığınız

25

JQuery's kullanın noConflict. Benim için harikalar yarattı

var example=jQuery.noConflict();
example(function(){
example('div#rift_connect').click(function(){
    example('span#resultado').text("Hello, dude!");
    });
});

Yani, HTML'nize jQuery eklediğinizi varsayarsak

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


11

Bu pasajı deneyin:

jQuery(function($) {
  // Your code.
})

Benim için çalıştı, belki de size yardımcı olacaktır.


11

Bu sorunu yalnızca Chrome'da yaşadım.

Eklemeyi denedim

var $ =jQuery.noConflict();

aramadan hemen önce

$(document).ready(function () {

İşe yaradı.

Çok teşekkürler


Bunun için teşekkürler. Ben "$" yerine "jQuery" kullanarak sorunu çözebilir biliyordum ama benim sorunum bu şekilde yazıldığında Komodo düzenleme yukarı trips $ kod ipucu / tamamlama alma ya da benim JavaScript gerçekten çalışma arasında seçim vardı. Bu yöntem her ikisine de sahip olmamı sağlıyor.
George Kendros

6

Ayrıca, jQuery, ardından bazı bileşenler / diğer kütüphaneler (jQuery UI gibi) ve sonra yanlışlıkla jQuery dahil olmak üzere kontrol edin - bu, jQuery'yi yeniden tanımlayacak ve bileşen yardımcılarını (.datepicker gibi) örnekten çıkaracaktır.


4
 ;(function($){
        // your code
    })(jQuery);

Js kodunuzu yukarıdaki kapağın içine yerleştirin, sorunu çözmelidir.


4

Bunu kullanırdım

(function ($) {
   $(document);
}(jQuery));

2

Ayrıca web geliştirme taşıyıcısında birçok kez bu tür sorunlarla karşılaştım. Aslında onun JS çatışması değil, Tarayıcıya html web sitesi yüklediğimizde böyle bir hatayla karşılaşmıyoruz, ancak localhost aracılığıyla bu tür web sitelerini yüklediğimizde böyle bir sorunla karşılaşıyoruz. Bunun nedeni yerel ev sahibi. Yerel ana bilgisayar üzerinden komut dosyaları yüklediğimizde, komut dosyasını tarar ve çıktıyı oluşturur. Ancak localhost kullanmadığımızda. Sadece çıktıyı tarar. Örneğin, php kodunu yazdığımızda localhost koyar ve host olmadan çalıştırırsak hata alırız. Ancak kod doğruysa ve ana bilgisayardan çalıştırılıyorsa, gerçek çıktı alırız ve denetleme öğesini kullandığımızda çıktı kodunu HTMl biçiminde alırız, ancak PHP biçiminde değil, bunun nedeni kodun oluşturulmasıdır.

Bu oluşturma hatasıdır. Bu jquery kod hatasını düzeltmek için çözümlerden biri bu yöntemi kullanıyor olabilir.

jQuery(document).ready(function($){
/******** Body of Jquery Code*****/
});

Bu kodun yaptığı şey, jquery uygulanarak işleve değişken olarak '$' yazılmasıdır. Aksi takdirde .js dosyası yalnızca javascript olarak okunur.


1

Ayrıca jQuery sayfa başlığına dahil ederken, ana makine zaten sayfaya otomatik olarak dahil olduğunu fark değil bu sorunla karşılaştı. Bu yüzden sayfanızı canlı yükleyin ve jQuery'nin bağlanıp bağlanmadığını görmek için kaynağı kontrol edin.


1

İki şey:

  1. $ (Belgeniz) öncesinde jQuery kitaplığı eklediğinizden emin olun.
  2. Sonra sadece "$" ile jQuery önceki yorumları değiştirin.

1

tüm betiği bu ara ...

<script>
    $.noConflict();
    jQuery( document ).ready(function( $ ) {
      // Code that uses jQuery's $ can follow here.
    });
</script>

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ığı kullanmanız gerekiyorsa, $ .noConflict () çağrısıyla $ kontrolünü diğer kitaplığa geri döndürün . JQuery başlatma sırasında eski $ referansları kaydedilir; noConflict () basitçe onları geri yükler.


1

Aşağıdaki snippet'i hem jQuery hem de $ in kullanabilirsiniz. benim için çalıştı

jQuery( document ).ready(function( $ ) {
  // jQuery(document)
  // $(document)
});

1

$ () Fonksiyonunda geçebilirsiniz

jQuery(document).ready(function($){

// jQuery code is in here

});

ya da değiştirebilirsiniz $(document); bununlajQuery(document);

ya da kullanabilirsiniz jQuery.noConflict()

var jq=jQuery.noConflict();
jq(document).ready(function(){  
  jq('selector').show();
});
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.