$ ไม่ได้กำหนดโดยใช้ jQuery ใน WordPress


32

ฉันรู้ว่ามีการโหลด jQuery เพราะฉันสามารถสลับ$สำหรับ 'jQuery' และทุกอย่างทำงานตามที่คาดไว้ แต่นี่จะเป็นสคริปต์ที่ยุ่งหากฉันไม่สามารถแก้ไขได้

สคริปต์นี้:

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

สร้างข้อผิดพลาด $ is not a function

สคริปต์นี้:

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

ทำงานได้ดี

คำตอบ:


42

คุณสามารถตัดจาวาสคริปต์ของคุณไว้ในฟังก์ชั่นการเรียกตนเองแล้วส่งผ่านjQueryเป็นอาร์กิวเมนต์ไปใช้โดยใช้$เป็นชื่อตัวแปรโลคอล ตัวอย่างเช่น:

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

ควรทำงานตามที่ตั้งใจไว้

หากฉันจำ jQuery เวอร์ชันที่ WP จัดหาให้ได้อย่างถูกต้อง (อันที่คุณได้รับถ้าคุณwp_enqueue_script('jquery')) ทำให้ jQuery ไม่มีความขัดแย้งในทันทีทำให้$ไม่ได้กำหนดไว้


ใช่ฉันเข้าใจแล้ว ฉันเคยเพิ่มมันด้วยมือซึ่งอธิบายว่าทำไมฉันไม่เจอปัญหานี้
Mild Fuzz

ขอบคุณฉันใช้รูปแบบทางเลือกกับ jQuery ที่จุดเริ่มต้นแทนจุดสิ้นสุด แต่ไม่สามารถหาวิธีคืนค่าได้ด้วยรูปแบบนี้ฉันเพิ่งเพิ่มการส่งคืนก่อนฟังก์ชั่นการเรียกใช้ด้วยตนเองและทำงานได้
eselk

คำตอบที่มีประโยชน์มาก
MarkSkayff

32

คุณเกือบจะอยู่ที่นั่นแล้ว!

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

});

คุณต้องส่งต่อการอ้างอิงไปยัง jQuery เป็น$ฟังก์ชันในวิธีการของคุณไม่เช่นนั้นจะไม่ทำงาน หากคุณเพียงแค่วาง $ ในการfunction()โทรครั้งแรกตามที่ฉันได้กล่าวไว้ข้างต้นสิ่งต่างๆจะใช้ได้ดี


4
+1: สามารถอ่านได้มากกว่าการวางjQueryในตอนท้าย
fuxia

1
... แต่มันไม่ใช่วิธีมาตรฐานในการทำฟังก์ชั่นนิรนาม forum.jquery.com/topic/jquery-anonymous-function-calls
BryanH

5
ใช่และไม่. พวกเขาทั้งสองคิดว่าวิธีการ "มาตรฐาน" ในการทำมัน หนึ่งสร้างคลาสเดี่ยวที่ได้$กำหนดไว้ในเครื่อง อื่น ๆ เพียงแค่กำหนดจัดการสำหรับเอกสารที่readyเหตุการณ์และผ่านวัตถุ jQuery $เข้าไปจัดการเป็น หากคุณกำลังพยายามเชื่อมต่อกับreadyเหตุการณ์วิธีที่สองจะถูกใช้อย่างกว้างขวางยิ่งขึ้น หากคุณต้องการ jQuery เพื่อจุดประสงค์อื่น (เพื่อขอ$.browserยกตัวอย่าง) คุณจะต้องใช้คลาสซิงเกิล
EAMann

+1 สำหรับ jQuery (เอกสาร) .ready (ฟังก์ชั่น ($) { ... หมอข่าวสารเกี่ยวกับ jQuery และ WordPress คุณยังสามารถอ่านโพสต์ของฉัน: wpengineer.com/2028/small-tips-using-wordpress-and-jquery
bueltge

6

การส่งผ่านฟังก์ชั่นไปยัง jQuery นั้นย่อ$(document).ready(...)มาจากการวาง$เป็นพารามิเตอร์แรกของการโทรกลับของคุณคุณสร้างนามแฝงสำหรับ jQuery ภายในการติดต่อกลับนั้น

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

คุณสามารถดูเอกสารสำหรับนี้ที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.