ตรวจสอบว่ามีการโหลด jquery โดยใช้ Javascript หรือไม่


176

ฉันพยายามตรวจสอบว่าห้องสมุด Jquery ของฉันโหลดเข้าสู่หน้า HTML ของฉันหรือไม่ ฉันกำลังตรวจสอบเพื่อดูว่าใช้งานได้หรือไม่ แต่มีบางอย่างไม่ถูกต้อง นี่คือสิ่งที่ฉันมี:

<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <script type="text/javascript" src="/query-1.6.3.min.js"></script>
        <script type="text/javascript">
          $(document).ready(function(){
             if (jQuery) {  
               // jQuery is loaded  
               alert("Yeah!");
             } else {
               // jQuery is not loaded
               alert("Doesn't Work");
             }
          });
        </script>

3
อย่าใช้ตัวพิมพ์ใหญ่ R ใน "$ (document)
.Ready

7
alert(window.$?1:0)
Thielicious

ทำไมคุณยังคงใช้มาตรฐาน xhtml เก่าอยู่ ใช้<!doctype html>แทน
Luke the Geek

หาก$(document)ฟังก์ชั่นพร้อมทำงานเลยโหลด jquery แล้ว ดังนั้นคุณสามารถทำได้จริง ๆ$(document).ready(function(){ alert("Ready!"); }); แล้วสิ่งนี้จะไม่แสดงการแจ้งเตือนหาก jquery ไม่สามารถทำงานได้ แต่ก็เพียงพอแล้วหากคุณเพียงแค่ต้องยืนยันว่าคุณได้อ้างอิงห้องสมุด jquery อย่างถูกต้อง
ToolmakerSteve

คำตอบ:


338

บางสิ่งไม่ถูกต้อง

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

ลบของคุณ$(document).ready()(ใช้สิ่งที่ต้องการwindow.onloadแทน):

window.onload = function() {
    if (window.jQuery) {  
        // jQuery is loaded  
        alert("Yeah!");
    } else {
        // jQuery is not loaded
        alert("Doesn't Work");
    }
}

1
สิ่งนี้จะยังคงโยนข้อผิดพลาดตามที่jQueryไม่ได้กำหนด window.jQueryคุณจำเป็นต้องตรวจสอบ
gilly3

@ gilly3: ใช่ปัญหาการกำหนดขอบเขตที่น่ารำคาญ แก้ไขแล้ว.
BoltClock

ฉันมีไฟล์ jquery-1.6.3.min.js ในไดเรกทอรีเดียวกับไฟล์ html ไม่แน่ใจว่าทำไมมันไม่โหลด
SoftwareSavant

3
@DmainEvent: พวกเขาทั้งสองในไดเรกทอรีราก? ของคุณsrcมีความเป็นผู้นำ/นั่นหมายความว่ามันกำลังค้นหาในราก
BoltClock

ไม่จริง ให้ฉันเปลี่ยนมันและให้มันยิง
SoftwareSavant

46

ตามลิงค์นี้ :

if (typeof jQuery == 'undefined') {
    // jQuery IS NOT loaded, do stuff here.
}


มีความคิดเห็นเพิ่มเติมในลิงค์นี้เช่นกัน

if (typeof jQuery == 'function') {...}

//or

if (typeof $== 'function') {...}

// or

if (jQuery) {
    alert("jquery is loaded");
} else {
    alert("Not loaded");
}


หวังว่านี่จะครอบคลุมวิธีที่ดีที่สุดในการทำสิ่งนี้ให้สำเร็จ !!


2
@JakeN หลังจากผ่านไประยะหนึ่งแล้วไม่สามารถยกเลิกการลงคะแนนได้จนกว่าจะมีการแก้ไขโพสต์ มีปัญหาหนึ่งสำหรับโพสต์นี้ แต่: if (jQuery) {จะโยนข้อผิดพลาดในโหมดเข้มงวดหาก jQuery ไม่ได้โหลดดังนั้นข้อมูลโค้ดสุดท้ายเป็นคำแนะนำที่ไม่ดี
JLRishe


15

คุณสามารถทำได้อย่างรวดเร็วบนแท็บคอนโซลเมื่อตรวจสอบหน้าเว็บของคุณ

เช่น:

$ === jQuery

ถ้ามันคืนtrueมันหมายความว่ามันโหลด


สิ่งนี้จะเพิ่มข้อยกเว้นหากไม่ได้โหลด jQuery แต่:Uncaught ReferenceError: jQuery is not defined
Batkins

10

เพียงแค่การดัดแปลงเล็กน้อยที่อาจช่วยแก้ปัญหาได้:

window.onload = function() {
   if (window.jQuery) {  
       // jQuery is loaded  
       alert("Yeah!");
   } else {
    location.reload();
   }
}

แทนการใช้งาน$(document).Ready(function()window.onload = function()


1

หากjQueryกำลังโหลดแบบอะซิงโครนัสคุณสามารถรอจนกระทั่งมันถูกกำหนดตรวจสอบได้ทุกช่วงเวลา:

(function() {
    var a = setInterval( function() {
        if ( typeof window.jQuery === 'undefined' ) {
            return;
        }
        clearInterval( a );

        console.log( 'jQuery is loaded' ); // call your function with jQuery instead of this
    }, 500 );
})();

วิธีนี้สามารถใช้กับตัวแปรใด ๆ ที่คุณกำลังรอให้ปรากฏ


-2

คุณสามารถพิมพ์ window.jQueryในคอนโซล หากมันส่งคืนฟังก์ชัน (e, n) ... จากนั้นจะได้รับการยืนยันว่า jquery ถูกโหลดและทำงานได้สำเร็จ


-4

วิธีที่รวดเร็วคือการเรียกใช้คำสั่ง jQuery ในคอนโซลนักพัฒนาซอฟต์แวร์ ในเบราว์เซอร์ใด ๆ กด F12 และพยายามเข้าถึงองค์ประกอบใด ๆ

 $("#sideTab2").css("background-color", "yellow");

ป้อนคำอธิบายรูปภาพที่นี่

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