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

Fuzz Ringan
sumber

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.

tak seorangpun
sumber
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.

EAMann
sumber
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 .

rohmann
sumber