$ tidak didefinisikan menggunakan jQuery di WordPress


32

Saya tahu bahwa jQuery dimuat, karena saya dapat mengganti $untuk 'jQuery' dan semuanya berperilaku seperti yang diharapkan, tetapi ini akan menjadi skrip yang berantakan jika saya tidak dapat memperbaikinya

Skrip ini:

jQuery(document).ready(function(){
    $("ul.vimeo_desc_feed li a").click(function(){
        alert($(this).attr('href'));
        return false;
    })
});

Menghasilkan kesalahan $ is not a function

Skrip ini:

jQuery(document).ready(function(){
    jQuery("ul.vimeo_desc_feed li a").click(function(){
        alert(jQuery(this).attr('href'));
        return false;
    })
});

bekerja dengan baik.

Jawaban:


42

Anda bisa membungkus javascript Anda di dalam fungsi self-invaging, lalu meneruskan jQuerysebagai argumen padanya, menggunakan $sebagai nama variabel lokal. Sebagai contoh:

(function($) {
  $(document).ready(function(){
    $("ul.vimeo_desc_feed li a").click(function(){
      alert($(this).attr('href'));
      return false;
    })
 });
}(jQuery));

harus bekerja sebagaimana dimaksud.

Jika saya ingat dengan benar versi jQuery yang disediakan WP (yang Anda dapatkan jika Anda wp_enqueue_script('jquery')) segera menempatkan jQuery di tanpa konflik, sehingga menyebabkan $undefined.


aah, begitu. Saya biasa menambahkannya dengan tangan, yang menjelaskan mengapa saya belum menemukan masalah ini.
Mild Fuzz

Terima kasih, saya menggunakan format alternatif dengan jQuery di awal alih-alih akhir .. tetapi tidak tahu cara mengembalikan nilai, dengan format ini saya baru saja menambahkan kembali sebelum fungsi self-invoking, dan berfungsi.
eselk

Jawaban yang sangat berguna.
MarkSkayff

32

Kamu hampir sampai!

jQuery(document).ready(function($){
    $("ul.vimeo_desc_feed li a").click(function(){
        alert($(this).attr('href'));
        return false;
    })

});

Anda harus meneruskan referensi ke jQuery sebagai $fungsi ke dalam metode Anda atau itu tidak akan berfungsi. Jika Anda hanya menempatkan $ di dalam function()panggilan pertama seperti yang saya lakukan di atas, semuanya akan berfungsi dengan baik.


4
+1: Itu lebih mudah dibaca daripada menempatkan jQuerydi akhir.
fuxia

1
... tapi itu bukan cara standar untuk melakukan fungsi anonim. forum.jquery.com/topic/jquery-anonymous-function-calls
BryanH

5
Iya dan tidak. Keduanya dianggap sebagai cara "standar" untuk melakukannya. Seseorang menciptakan kelas tunggal yang telah $didefinisikan secara lokal. Yang lain hanya mendefinisikan pawang untuk acara dokumen readydan meneruskan objek jQuery ke pawang sebagai $. Jika Anda mencoba terhubung ke readyacara tersebut, metode kedua lebih banyak digunakan. Jika Anda memerlukan jQuery untuk tujuan lain (untuk menghubungkan ke $.browsermisalnya), Anda akan menggunakan kelas singleton.
EAMann

+1 untuk jQuery (document) .ready (function ($) {... mor info tentang jquery dan WordPress dapat Anda baca juga di posting saya: wpengineer.com/2028/small-tips-using-wordpress-and-jquery .
bueltge

6

Melewati fungsi ke jQuery adalah singkatan untuk $(document).ready(...)kemudian dengan menempatkan $sebagai parameter pertama dari panggilan balik Anda, Anda membuat alias untuk jQuery di dalam panggilan balik itu:

jQuery(function($) {
    $("ul.vimeo_desc_feed li a").click(function(){
        alert($(this).attr('href'));
        return false;
    });
});

Anda dapat melihat dokumentasi untuk ini di sini .

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.