TypeError: 'undefined' ไม่ใช่ฟังก์ชั่น (ประเมิน '$ (เอกสาร)')


139
  1. ฉันใช้เว็บไซต์ WordPress
  2. ฉันรวมสคริปต์นี้ไว้ในส่วนหัว

เมื่อสคริปต์โหลดฉันได้รับข้อผิดพลาดนี้:

TypeError: 'undefined' ไม่ใช่ฟังก์ชั่น (ประเมิน '$ (เอกสาร)')

ฉันไม่รู้ว่าอะไรเป็นสาเหตุของมันหรือว่ามันหมายถึงอะไร

ใน firebug ฉันได้รับสิ่งนี้:

$ ไม่ใช่ฟังก์ชั่น


4
ตรวจสอบให้แน่ใจว่าคุณใส่ jQuery libary ไว้ก่อนสคริปต์ที่กำหนดเองของคุณและไม่มีข้อผิดพลาดในNetแท็บของ Firebug (ตรวจสอบให้แน่ใจว่า jQuery ได้รับการโหลดจริง)
wsanville

... ใช่แน่นอนว่า jQuery กำลังโหลดก่อนมือ ฉันค่อนข้างแน่ใจว่ามันเป็นปัญหา WordPress
dcolumbus

คำตอบ:


239

Wordpress ใช้ jQuery ในโหมดnoConflictโดยค่าเริ่มต้น คุณต้องอ้างอิงโดยใช้jQueryเป็นชื่อตัวแปรไม่ใช่$เช่นใช้

jQuery(document);

แทน

$(document);

คุณสามารถห่อสิ่งนี้ไว้ในฟังก์ชั่นการดำเนินการด้วยตนเองเพื่อที่$จะอ้างถึง jQuery อีกครั้ง (และหลีกเลี่ยงการสร้างมลภาวะเนมสเปซส่วนกลางด้วย) เช่น

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

5
สคริปต์ไม่จำเป็น คุณก็สามารถเรียกjQuery(document)แทน$(document)ปลายทางที่คุณต้องการ หากคุณต้องการที่จะใช้$แทนสคริปต์ข้างต้นก็สร้างฟังก์ชั่นที่ใช้อาร์กิวเมนต์$แล้วรันมันผ่านjQuery; กล่าวโดยย่อภายในฟังก์ชันให้$ชี้ไปที่ jQuery ตามที่คุณคาดหวัง
El Yobo

2
ที่จริงแล้วสิ่งที่ฉันทำคือการวางปกติ$(document).ready(function() { // code });ของคุณแทน$(document);... ที่ทำงานเหมือนมีเสน่ห์
dcolumbus

1
ใช่นั่นคือสิ่งที่ฉันแนะนำ - "ภายในฟังก์ชั่น, $ คะแนนถึง jQuery ตามที่คุณคาดหวัง"
El Yobo

ดีที่มันไม่ช่วยให้คุณประหยัดคู่ของตัวละครที่ทาง :) รายละเอียดเพิ่มเติมเกี่ยวกับฟังก์ชั่น! () {} () รูปแบบของคำสั่งการดำเนินการด้วยตนเอง
El Yobo

ฉันรู้ว่ามันเก่า @ElYobo แต่ฉันคิดว่าคุณสามารถแก้ไขโพสต์ของคุณและเพิ่มตัวอย่างจากความคิดเห็นแรกของคุณลงในการตอบสนองเป็นตัวอย่างที่สอง ขอบคุณที่ช่วยฉันประหยัดเวลา =)
Manatax

25

การใช้งานของ noConflictjQuery มันมหัศจรรย์สำหรับฉัน

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

นั่นคือสมมติว่าคุณรวม jQuery ไว้ใน HTML

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


11

ลองตัวอย่างนี้:

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

มันใช้งานได้สำหรับฉันบางทีมันอาจจะช่วยคุณได้เช่นกัน


11

ฉันมีปัญหานี้กับ Chrome เท่านั้น

ฉันพยายามเพิ่ม

var $ =jQuery.noConflict();

ก่อนที่จะโทร

$(document).ready(function () {

มันได้ผล

ขอบคุณมาก


ขอบคุณสำหรับสิ่งนี้ ฉันรู้ว่าฉันสามารถแก้ไขปัญหาได้โดยใช้ "jQuery" แทนที่จะเป็น "$" แต่ปัญหาของฉันคือการแก้ไข Komodo เมื่อเขียนแบบนั้นดังนั้นฉันจึงต้องเลือกระหว่างการรับรหัส / เสร็จสิ้นใน $ หรือ JavaScript ของฉันใช้งานได้จริง วิธีนี้ให้ฉันมีทั้งคู่
George Kendros

6

ตรวจสอบการรวม jQuery ตามด้วยคอมโพเนนต์ / ไลบรารีอื่น ๆ (เช่น jQuery UI) แล้วบังเอิญรวม jQuery อีกครั้ง - นี่จะกำหนด jQuery อีกครั้งและวางผู้ช่วยส่วนประกอบ (เช่น. datepicker) ออกจากอินสแตนซ์




2

ฉันยังประสบปัญหาดังกล่าวหลายครั้งในผู้ให้บริการพัฒนาเว็บไซต์ จริงๆแล้วมันไม่ใช่ความขัดแย้งของ JS เมื่อเราโหลดเว็บไซต์ html ไปยังเบราว์เซอร์เราก็ไม่พบข้อผิดพลาดดังกล่าว แต่เมื่อเราโหลดเว็บไซต์ประเภทนี้ผ่าน localhost เราก็ประสบปัญหาดังกล่าว นั่นเป็นเพราะ localhost เมื่อเราโหลดสคริปต์ผ่าน localhost มันสแกนสคริปต์และแสดงผล แต่เมื่อเราไม่ได้ใช้ localhost มันแค่สแกนเอาต์พุต ตัวอย่างเมื่อเราเขียนโค้ด php วางไว้บน localhost และทำงานโดยไม่โฮสต์เราได้รับข้อผิดพลาด แต่ถ้ารหัสถูกต้องและทำงานผ่านโฮสต์เราได้รับผลลัพธ์จริงและเมื่อเราใช้องค์ประกอบตรวจสอบเราได้รับรหัสผลลัพธ์ในรูปแบบ HTMl แต่ไม่ใช่ในรูปแบบ PHP นี่เป็นเพราะการแสดงผลของรหัส

นี่คือการแสดงผลข้อผิดพลาด ดังนั้นเพื่อแก้ไขข้อผิดพลาดรหัส jquery เหล่านี้วิธีหนึ่งอาจใช้วิธีนี้

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

สิ่งที่รหัสนี้จะลงทะเบียน '$' เป็น varible กับฟังก์ชั่นโดยใช้ jquery อื่นตามค่าเริ่มต้นไฟล์. js จะอ่านเป็น javascript เท่านั้น


1

ฉันพบปัญหานี้เมื่อรวม jQuery ในส่วนหัวของหน้าฉันไม่ทราบว่าโฮสต์ได้รวมไว้ในหน้าโดยอัตโนมัติ ดังนั้นให้โหลดหน้าเว็บของคุณแบบสดๆและตรวจสอบแหล่งที่มาเพื่อดูว่ามีการเชื่อมโยง jQuery หรือไม่


1

สองสิ่ง:

  1. ตรวจสอบให้แน่ใจว่าคุณได้เพิ่มห้องสมุด jQuery ไว้หน้า $ (เอกสาร)
  2. จากนั้นเพียงแค่เปลี่ยน "$" ทั้งหมดด้วย: jQuery ตามความคิดเห็นก่อนหน้า

1

รวมสคริปต์ทั้งหมดระหว่างนี้ ...

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

ไลบรารี JavaScript จำนวนมากใช้ $ เป็นฟังก์ชันหรือชื่อตัวแปรเช่นเดียวกับ jQuery ในกรณีของ jQuery $ เป็นเพียงนามแฝงสำหรับ jQuery ดังนั้นฟังก์ชันทั้งหมดจึงใช้ได้โดยไม่ต้องใช้ $ หากคุณจำเป็นต้องใช้ห้องสมุด JavaScript อีกข้าง jQuery ควบคุมการกลับมาของ $ กลับไปที่ห้องสมุดอื่น ๆ ที่มีการเรียกไปยัง$ .noConflict () การอ้างอิงเก่าของ $ จะถูกบันทึกไว้ในระหว่างการเริ่มต้น jQuery noConflict () เพียงแค่คืนค่าพวกเขา


1

คุณสามารถใช้ทั้ง jQuery และ $ in ด้านล่างตัวอย่าง มันใช้งานได้สำหรับฉัน

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

1

คุณสามารถส่ง $ ในฟังก์ชั่น ()

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

// jQuery code is in here

});

หรือคุณสามารถแทนที่$(document);ด้วยสิ่งนี้jQuery(document);

หรือคุณสามารถใช้ jQuery.noConflict()

var jq=jQuery.noConflict();
jq(document).ready(function(){  
  jq('selector').show();
});
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.