TypeError: $ bukan fungsi saat memanggil fungsi jQuery


214

Saya memiliki skrip jQuery sederhana di plugin WordPress yang menggunakan pembungkus jQuery seperti ini:

$(document).ready(function(){

    // jQuery code is in here

});

Saya memanggil skrip ini dari dalam Dashboard WordPress dan saya memuatnya SETELAH kerangka kerja jQuery telah dimuat.

Ketika saya memeriksa halaman di Firebug, saya terus menerima pesan kesalahan:

TypeError: $ bukan suatu fungsi

$ (dokumen) .ready (function () {

Haruskah saya membungkus skrip dalam fungsi ini:

(function($){

    // jQuery code is in here

})(jQuery);

Saya telah mengalami kesalahan ini beberapa kali dan tidak yakin bagaimana cara menanganinya.

Bantuan apa pun akan sangat dihargai.


3
Jika Anda mengetikkan $konsol dan menekan enter - apa yang Anda lihat?
zerkms

Saat menjalankan $ dalam konsol saya menerima "tidak terdefinisi"
Jason

Jawaban:


320

Secara default ketika Anda membuat jQuery di Wordpress Anda harus menggunakan jQuery, dan $tidak digunakan (ini untuk kompatibilitas dengan perpustakaan lain).

Solusi Anda membungkusnya functionakan bekerja dengan baik, atau Anda dapat memuat jQuery dengan cara lain (tapi itu mungkin bukan ide yang baik di Wordpress).

Jika Anda harus menggunakan document.ready, Anda sebenarnya dapat masuk $ke panggilan fungsi:

jQuery(function ($) { ...

Saya mencoba versi kedua tetapi tidak berhasil, versi pertama tetapi saya hanya ingin memastikan saya tidak menggandakan panggilan jQuery.
Jason

@ Alasan Anda bahkan tidak membutuhkannya; persis seperti yang saya diposting: jsfiddle.net/vcbYJ
Explosion Pills

Bisakah Anda melihat pertanyaan ini wordpress.stackexchange.com/questions/214858/…

Dan jika ada pemilih di luar jQuery(function ($) { ..., Anda harus menggunakan jQuerysebagai gantinya$
Misha Rudrastyh

Terima kasih kawan Hargai itu
Desper

153

Ini harus memperbaikinya:

jQuery(document).ready(function($){
  //you can now use $ as your jQuery object.
  var body = $( 'body' );
});

Sederhananya, WordPress menjalankan skrip mereka sendiri sebelum Anda dapat dan mereka merilis $var sehingga tidak akan bertabrakan dengan perpustakaan lain. Ini masuk akal, karena WordPress digunakan untuk semua jenis situs web, aplikasi, dan tentu saja, blog.

Dari dokumentasi mereka:

Pustaka jQuery yang disertakan dengan WordPress diatur ke mode noConflict () (lihat wp-include / js / jquery / jquery.js). Ini untuk mencegah masalah kompatibilitas dengan perpustakaan JavaScript lain yang dapat ditautkan oleh WordPress.

Dalam mode noConflict (), pintasan global $ untuk jQuery tidak tersedia ...


28

Solusi ini bekerja untuk saya

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

Pindahkan kode Anda di dalam penutupan dan gunakan $sebagai gantijQuery

Saya menemukan solusi di atas di /magento/33348/uncaught-typeerror-undefined-is-not-not-a-function-when-using-a-jquery-plugin-in-ma

... setelah mencari terlalu banyak


2
Solusi yang fantastis. Alasan utama ini berhasil adalah karena ";" menutup instance jquery lain yang sudah aktif dan pada saat yang sama menyatakan jquery baru secara lokal. Ketika Anda hanya memiliki beberapa detik untuk mengimplementasikan tata letak dalam produksi atau banyak dan banyak plugin wordpress yang menjalankan ini bisa melakukannya dengan baik. Tapi, ketahuilah bahwa Anda harus memperbaiki masalah ini, ini hanya bantuan band, tetapi jika ini adalah halaman info, tidak apa-apa.
luis

@Martha James Ini bekerja untuk saya jadi termasuk itu. Ini mungkin atau mungkin tidak bekerja untuk orang lain
Bikram Shrestha

19

Anda dapat menghindari konflik seperti ini

var jq=jQuery.noConflict();
jq(document).ready(function(){  
  alert("Hi this will not conflict now");
  jq('selector').show();
});

7
Atau $ = jQuery.noConflict ();
Cyssoo


13

Coba ini:

<script language="JavaScript" type="text/javascript" src="jquery/jquery.js"></script>
<script>
    jQuery.noConflict();
    (function ($) {
        function readyFn() {
            // Set your code here!!
        }

        $(document).ready(readyFn); 
    })(jQuery);

</script>

8

Anda harus melewati fungsi $ in ()

<script>
jQuery(document).ready(function($){

// jQuery code is in here

});
</script>

3
Bagaimana ini berbeda dari jawaban yang diberikan di atas (dari tiga tahun sebelumnya)?
rnevius

8

ganti $tanda dengan jQuery seperti ini:

jQuery(function(){
//your code here
});

7

Periksa referensi jQuery Anda. Mungkin saja Anda merujuknya lebih dari satu kali atau Anda memanggil fungsi terlalu dini (sebelum jQuery didefinisikan). Anda dapat mencoba seperti yang disebutkan dalam komentar saya dan meletakkan referensi jQuery di bagian atas file Anda (di kepala) dan melihat apakah itu membantu.

Jika Anda menggunakan enkapsulasi jQuery, itu seharusnya tidak membantu dalam kasus ini. Silakan coba karena saya pikir ini lebih cantik dan lebih jelas, tetapi jika jQuery tidak didefinisikan Anda akan mendapatkan kesalahan yang sama.

Pada akhirnya ... jQuery saat ini tidak didefinisikan.


Saya pikir ini bukan sesuatu yang mencoba mengakses JQuery sebelum ditentukan yang pada gilirannya merusak segalanya. Coba pindahkan scriptreferensi Anda yang mana JQueryke atas Anda index.htmldan itu mungkin akan berhasil
Dan Moldovan

Jawaban ini membutuhkan lebih banyak visibilitas. Ya, yang lain valid jika namespace standar diambil dengan versi jQuery yang dimuat melalui beberapa plugin lain. Tetapi jangan periksa Anda tidak secara tidak sengaja (dan mungkin tidak perlu) memuat jQuery lebih dari sekali.
edkay


5

Menggunakan

jQuery(document).

dari pada

$(document).

atau

Dalam fungsi tersebut, $ poin ke jQuery seperti yang Anda harapkan

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

4

Apa yang berhasil untuk saya. Pustaka pertama yang diimpor adalah pustaka kueri dan kemudian panggil metode jQuery.noConflict ().

<head>
 <script type="text/javascript" src="jquery.min.js"/>
 <script>
  var jq = jQuery.noConflict();
  jq(document).ready(function(){
  //.... your code here
    });
 </script>


3
<script>
var jq=jQuery.noConflict();
(function ($) 
    {
    function nameoffunction()
    {
        // Set your code here!!
    }

    $(document).ready(readyFn); 
    })(jQuery);

sekarang gunakan jq sebagai ganti jQuery


3

Anda menemukan masalah ini ketika nama fungsi Anda dan salah satu nama id dalam file sama. pastikan semua nama id Anda di file unik.


2

Kamu bisa memakai

jQuery(document).read(function(){ ... });

atau

(function ($) { ... }(jQuery));
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.