Uncaught TypeError: undefined ไม่ใช่ฟังก์ชันในการโหลด jquery-min.js


104

ฉันกำลังสร้างหน้าเว็บปกติซึ่งต้องการให้ฉันโหลดไฟล์ CSS ห้าไฟล์และไฟล์ Javascript สิบไฟล์

  • เมื่อโหลดแยกกันในหน้า HTML หน้าเว็บของฉันโหลดได้ดี
  • ตอนนี้สำหรับการใช้งานจริงฉันต่อ Javascript ทั้งหมดเป็นไฟล์เดียวตามลำดับที่ต้องการและ CSS ทั้งหมดลงในไฟล์อื่น แต่เมื่อฉันพยายามเรียกใช้หน้าเว็บด้วยไฟล์ที่ต่อกันมันแสดงข้อผิดพลาดว่า:

    Uncaught TypeError: undefined is not a function

ในบรรทัดที่ jquery.min.js ถูกโหลดในไฟล์ Javascript ที่ต่อกัน

ฉันจะทำอย่างไรเพื่อลดปัญหานี้ ฉันต้องการต่อไฟล์ทั้งหมดและย่อขนาดเพื่อใช้ในการผลิต กรุณาช่วย.


แก้ไข:ฉันรวม Javascript และ CSS ตามลำดับที่พวกเขาโหลดทีละรายการและทำงานได้ดี


5
เราจะรู้ได้อย่างไรว่าundefinedถ้าคุณไม่มีรหัสที่จะแสดง?
โจเซฟ

ที่ไม่ได้กำหนดมาใน jquery-1.6.1.min.js ที่ฉันกำลังโหลด อาจจะโหลด jquery ไม่ถูกต้องหรืออะไร?
ghostCoder

ยอมรับคำตอบระดับสูงหรือไม่
Allisone

คำตอบ:


180

สมมติว่าปัญหานี้ยังไม่ได้รับการแก้ไขไฟล์แต่ละไฟล์จำนวนมากไม่ได้ลงท้ายโค้ดด้วยเครื่องหมายอัฒภาค จบสคริปต์ jQuery ส่วนใหญ่ที่มีและคุณจำเป็นต้องมี(jQuery)(jQuery);

ในฐานะที่เป็นไฟล์แยกต่างหากสคริปต์จะโหลดได้ดี แต่คุณต้องใช้อัฒภาคเป็นไฟล์เดียว


18
+1. เมื่อเชื่อมต่อโค้ด JavaScript เข้าด้วยกันคุณควรเชื่อมต่อกับอัฒภาคเสมอ จำนวนมากเกินไปที่ยังใช้ได้ในขณะที่นำไปสู่ข้อผิดพลาดน้อยลง
Bergi

9
เป็นเรื่องยากอย่างไม่น่าเชื่อในการแก้ไขข้อบกพร่อง ขอบคุณสำหรับคำตอบที่ได้ผลจริงๆ!
ghayes

5
js ของ Bootstrap เป็นตัวอย่างหนึ่งที่เห็นได้ชัด ขอบคุณสำหรับสิ่งนี้! นั่นคือเครื่องขูดเส้นก๋วยเตี๋ยวจริงๆ
Kevin Beal

ฉันกำลังพยายามนำเข้า youtube iframe API แต่ไม่ได้ลงท้ายด้วยอัฒภาคและฉันได้รับข้อผิดพลาดนี้ ฉันไม่ได้เชื่อมต่อกับอะไรเลย ... ฉันกำลังโหลดด้วย jQuery.getScript () ดังนั้น ... นี่อาจเป็นสาเหตุของข้อผิดพลาดของฉันหรือไม่? หรือว่าไม่สมเหตุสมผล?
แดเนียล

1
เราจะแก้ไขได้อย่างไรหากพบข้อผิดพลาดขณะทำงานกับไลบรารี ฉันพยายามใช้ 2.3.2 / js / bootstrap.min.js และ /1.4.6/bootstrap-editable/js/bootstrap-editable.min.js
codeObserver

28

คุณอาจต้องตรวจสอบลำดับที่คุณกำลังรวมไฟล์อีกครั้งซึ่งควรเป็นดังนี้:

  1. jquery.min.js
  2. jquery-ui.js
  3. ปลั๊กอินของบุคคลที่สามที่คุณโหลด
  4. JS ที่คุณกำหนดเอง

มันเป็นแบบนี้เฉพาะ json2.js, jquery-1.6.1.min.js, ปลั๊กอิน jquery, รหัสของฉัน ตามลำดับนี้
ghostCoder

ถ้า json2.js ใช้ฟังก์ชัน jquery ใด ๆ ควรเป็น jquery.min.js ก่อน ฉันจะแนะนำ. jquery.min.js, jqueryPlugins, json2.js, รหัสของฉัน
Bilal Murtaza

18

วิธีนี้ใช้ได้ผลสำหรับฉัน

    ; (ฟังก์ชัน ($) {
        // รหัสของคุณ
    }) (jQuery);

ย้ายรหัสของคุณเข้าไปในฝาปิดและใช้ $ แทน jQuery

ฉันพบวิธีแก้ปัญหาข้างต้นใน/magento/33348/uncaught-typeerror-undefined-is-not-a-function-when-using-a-jquery-plugin-in-ma

หลังจากนั่งมากเกินไป


16

ฉันได้รับข้อผิดพลาดเดียวกันจากการมีการอ้างอิงสองรายการไปยัง jQuery เวอร์ชันต่างๆ

ในหน้าต้นแบบของฉัน:

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

และในหน้า:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"> </script>

7

เมื่อเร็ว ๆ นี้ฉันมีปัญหากับปลั๊กอิน jQuery Validationโดยใช้Squishitและได้รับข้อผิดพลาด js ด้วย:

"ไม่ได้กำหนดไม่ใช่ฟังก์ชัน"

ฉันคงได้โดยการเปลี่ยนการอ้างอิงไปยังunminifiedไฟล์ jquery.validate.js มากกว่า jquery.validate.min.js

@MvcHtmlString.Create(
    @SquishIt.Framework.Bundle.JavaScript()
        .Add("~/Scripts/Libraries/jquery-1.8.2.min.js")
        .Add("~/Scripts/Libraries/jquery-ui-1.9.1.custom.min.js")
        .Add("~/Scripts/Libraries/jquery.unobtrusive-ajax.min.js")
        .Add("~/Scripts/Libraries/jquery.validate.js")
        .Add("~/Scripts/Libraries/jquery.validate.unobtrusive.js")
         ... more files

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


การใช้เวอร์ชันที่ไม่มีการปิดล้อมเป็นเพียงตั๋วสำหรับฉัน - ขอบคุณ
Paul Deen

สำหรับฉันมันเป็นไฟล์ json2.min.js จากเวอร์ชัน 1.0.2 ของแพ็คเกจ NuGet ซึ่งเป็นสาเหตุของปัญหา ฉันเปลี่ยนเป็นไฟล์ non-min และไฟล์รวม Squishit ทำงานได้ดีในขณะนี้
billoreid

6

สำหรับผู้ที่ยังไม่สามารถแก้ไขได้ฉันทำได้โดยเปลี่ยน 'this' เป็น '$ (this)' เมื่อใช้ jQuery

เช่น:

$('.icon').click(function() {
    this.fadeOut();
});

แก้ไขแล้ว:

$('.icon').click(function() {
    $(this).fadeOut();
});

5

ฉันพบปัญหาเดียวกันเมื่อตั้งชื่อตัวแปรผิดด้วยชื่อเดียวกันเป็นฟังก์ชัน

ดังนั้นสิ่งนี้:

isLive = isLive(data);

ล้มเหลวสร้างข้อความแสดงข้อผิดพลาดที่กล่าวถึงของ OP

การแก้ไขนี้ทำได้ง่ายเพียงแค่เปลี่ยนบรรทัดด้านบนเป็น:

isItALive = isLive(data);

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


5

ใช่ฉันยังแก้ไขการเปลี่ยนแปลงในไลบรารี js เป็น unminified

ตัวอย่างเช่นในแท็กเปลี่ยน:

<script type="text/javascript" src="js/jquery.ui.core.min.js"></script>
<script type="text/javascript" src="js/jquery.ui.widget.min.js"></script>
<script type="text/javascript" src="js/jquery.ui.rcarousel.min.js"></script>

สำหรับ:

<script type="text/javascript" src="js/jquery.ui.core.js"></script>
<script type="text/javascript" src="js/jquery.ui.widget.js"></script>
<script type="text/javascript" src="js/jquery.ui.rcarousel.js"></script>

ออกจาก 'min' เป็น unminified

ขอบคุณสำหรับความคิด


3

ข้อควรจำ: ฟังก์ชัน Javascript เป็น CASE SENSITIVE

ฉันมีกรณีที่ฉันค่อนข้างมั่นใจว่าโค้ดของฉันจะทำงานได้อย่างราบรื่น แต่ยังคงมีข้อผิดพลาดและฉันตรวจสอบคอนโซล Javascriptของ Google Chrome เพื่อตรวจสอบว่ามันคืออะไร

บรรทัดข้อผิดพลาดของฉันคือ

opt.SetAttribute("value",values[a]);

และได้รับข้อความแสดงข้อผิดพลาดเดียวกัน:

Uncaught TypeError: undefined is not a function

ดูเหมือนว่าไม่มีอะไรผิดปกติกับรหัสด้านบน แต่มันไม่ทำงาน ฉันแก้ปัญหาเป็นเวลาเกือบหนึ่งชั่วโมงแล้วเปรียบเทียบกับรหัสอื่นที่กำลังทำงานอยู่ ข้อผิดพลาดของฉันก็คือว่ามันถูกกำหนดให้ซึ่งควรจะSetAttributesetAttribute


2

เผื่อว่าจะมีคนปัญญาอ่อนเหมือนฉันฉันมีปัญหาที่น่าหงุดหงิดนี้เพราะฉันลืมเรื่องง่ายๆ

new

คำหลักก่อนที่จะสร้างอินสแตนซ์วัตถุใหม่


1

ฉันมีข้อความเดียวกันพร้อมรหัสต่อไปนี้ (ใน IcedCoffeeScript):

f = (err,cb) ->
  cb null, true

await f defer err, res
console.log err if err  

สำหรับฉันดูเหมือนรหัส ICS ปกติ ฉันกางโครงสร้างที่รอคอย - เลื่อนออกไปเป็น CoffeeScript ปกติ:

f (err,res) ->
  console.log err if err

สิ่งที่เกิดขึ้นจริงๆคือฉันพยายามส่ง 1 ฟังก์ชันการโทรกลับ (ที่มี 2 พารามิเตอร์) เพื่อทำงานโดยfคาดหวังสองพารามิเตอร์โดยไม่ได้ตั้งค่าcbภายในอย่างมีประสิทธิภาพfซึ่งคอมไพเลอร์รายงานอย่างถูกต้องว่าundefined is not a functionซึ่งคอมไพเลอร์ที่มีการรายงานอย่างถูกต้องตาม

ความผิดพลาดเกิดขึ้นเพราะฉันวางโค้ดสำเร็จรูปแบบโทรกลับแบบสุ่มสี่สุ่มห้า fไม่จำเป็นต้องมีการerrส่งผ่านพารามิเตอร์เข้าไปดังนั้นจึงควรเป็น:

f = (cb) ->
  cb null, true
f (err,res) ->
  console.log err if err

ในกรณีทั่วไปฉันขอแนะนำให้ตรวจสอบลายเซ็นของฟังก์ชันและการเรียกใช้ฟังก์ชันที่ตรงกันอีกครั้ง call-stack ในข้อความแสดงข้อผิดพลาดควรให้คำแนะนำที่เป็นประโยชน์ได้

ในกรณีพิเศษของคุณขอแนะนำให้ค้นหาคำจำกัดความของฟังก์ชันที่ปรากฏสองครั้งในไฟล์ที่ผสานพร้อมลายเซ็นที่แตกต่างกันหรือการกำหนดให้กับตัวแปรส่วนกลางที่ถือฟังก์ชัน


1

ตรวจสอบให้แน่ใจว่าคุณได้แสดงความคิดเห็นออกมาแล้ว บางครั้งเมื่อคัดลอกและวางคุณจะไม่ต้องใส่เครื่องหมาย "/ *!"

นอกจากนี้เมื่อคุณเข้าไปในคอนโซลพวกเขาจะแสดงรายการข้อผิดพลาดของคุณและคุณควรทำทีละรายการ หากคุณเห็น "Uncaught SyntaxError: Uncaught token *" นั่นอาจหมายความว่ากำลังอ่านไฟล์ js ของคุณและไม่ได้ผ่านบรรทัดแรก

/ *! * jquery.tools 1.1.2 - ไลบรารี UI ที่หายไปสำหรับเว็บ * * [tools.tabs-1.0.4, tools.tooltip-1.1.2, tools.scrollable-1.1.2, tools.overlay-1.1.2, tools.expose-1.0.5] * * ลิขสิทธิ์ (c) 2009 Tero Piirainen * http://flowplayer.org/tools/ * สร้างไฟล์: พ. 07 ต.ค. 09:40:16 GMT 2009 * /


0

ฉันได้รับสิ่งนี้เมื่อฉันส่งพารามิเตอร์มากเกินไปไปยังฟังก์ชัน jquery โดยไม่ได้ตั้งใจซึ่งคาดว่าจะมีพารามิเตอร์เรียกกลับเพียงตัวเดียว

สำหรับการแก้ไขปัญหาอื่น ๆ : ตรวจสอบให้แน่ใจว่าคุณได้ตรวจสอบฟังก์ชัน jquery ทั้งหมดของคุณเรียกหาพารามิเตอร์เพิ่มเติม

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