Uncaught TypeError: ไม่สามารถอ่านคุณสมบัติ 'msie' ของ undefined - เครื่องมือ jQuery


190

ฉันได้รับข้อผิดพลาดต่อไปนี้ในคอนโซล Chrome dev:

Uncaught TypeError: Cannot read property 'msie' of undefined

ความเข้าใจของฉันคือว่าเป็นเพราะ.browserตอนนี้เลิกใช้แล้วใน jQuery แต่ฉันใช้ jQuery tools เวอร์ชั่นล่าสุดและยังคงมีข้อผิดพลาดอยู่ฉันตรวจสอบjsไฟล์และมีอยู่

ฉันจะแก้ไขได้อย่างไรเพื่อที่จะไม่ให้ข้อผิดพลาด?


1
ข้อผิดพลาดนี้ไม่เพียงพอ คุณพยายามอ่านสิ่งนี้จากองค์ประกอบใด
Siddharth Gupta

ฉันไม่ได้ใช้.browserในรหัสของฉันเลย ดูเหมือนว่าจะตรวจพบในไฟล์เครื่องมือ jQuery
Colin747

6
browserวัตถุไม่ได้เป็นเพียงเลิกใน 1.9 ก็หายไป หาก jQuery Tools ยังคงใช้งานอยู่แสดงว่า jQuery Tools ใช้งานไม่ได้
แหลม

1
@ Alexander ที่ดูเหมือนว่าจะกำจัดข้อผิดพลาด คุณสามารถตอบคำถามได้หากต้องการ
Colin747

3
เครื่องมือ jQuery ล่าสุดได้รับการทดสอบด้วย jQuery 1.7 เท่านั้น jQuery 1.9 เข้ากันไม่ได้กับ jQuery Tools รุ่นล่าสุด มันง่ายมาก ดัมพ์ jQuery Tools หรือดาวน์เกรด jQuery เป็นเวอร์ชั่นใด ๆ ที่ต่ำกว่า 1.9 ที่ใช้งานได้ มิฉะนั้นอย่าคาดหวังว่าทุกคนจะอัปเดตเครื่องมือ jQuery เพราะไม่ได้เป็นผู้พัฒนาในช่วงสองสามปีที่ผ่านมา
ปาร์

คำตอบ:


189

$.browserวิธีการได้ถูกลบออก ณ jQuery 1.9

jQuery.browser() removed

jQuery.browser()วิธีการได้รับการคัดค้านตั้งแต่ jQuery 1.3 และจะถูกลบออกใน 1.9 หากจำเป็นจะสามารถใช้ได้เป็นส่วนหนึ่งของปลั๊กอิน jQuery Migrate เราขอแนะนำให้ใช้การตรวจจับคุณสมบัติด้วยไลบรารีเช่น Modernizr

- jQuery หลัก 1.9 อัพเกรดคู่มือ

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


242

คุณสามารถตรวจสอบโซลูชันนี้โดย AJ มันค่อนข้างตรงไปตรงมาเพียงแค่คัดลอกและวางบรรทัดของรหัสต่อไปนี้

jQuery.browser = {};
(function () {
    jQuery.browser.msie = false;
    jQuery.browser.version = 0;
    if (navigator.userAgent.match(/MSIE ([0-9]+)\./)) {
        jQuery.browser.msie = true;
        jQuery.browser.version = RegExp.$1;
    }
})();

เอกสารอ้างอิง :


4
งานนี้สมบูรณ์แบบ! แต่ฉันคิดว่ามันควรจะใช้เป็นปะแก้แทนที่จะเป็นใช่มั้ย
Jobokai

ขอขอบคุณที่ใช้ปลั๊กอิน jquery ที่ใช้สิ่งนี้และนี่เป็นวิธีแก้ปัญหาระยะสั้นอย่างง่าย ๆ จนกว่าจะมีการแก้ไขที่แท้จริง
Joe Meyer

ขอบคุณ เครื่องมือ Query คงที่นี้ v1.2.7 เนื่องจากเราอัปเกรด JQuery เป็นรุ่นล่าสุด
bsentosa

1
ว้าวถ้าฉันให้ 10 ข้อดีได้ฉันจะทำทันที
Iman Hejazi

9
คำตอบนี้ไม่ถูกต้องอีกต่อไปเนื่องจาก IE11 ไม่มีโทเค็น MSIE ในuserAgentสตริง
Dave Methvin

47

ใช้แท็กสคริปต์ต่อไปนี้ในไฟล์ jsp / js ของคุณ:

<script src="http://code.jquery.com/jquery-1.9.0.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>

นี้จะทำงานได้อย่างแน่นอน


ตรวจสอบให้แน่ใจว่าคุณมีการเชื่อมต่ออินเทอร์เน็ตที่ใช้งานได้ หากคุณใช้ออฟไลน์ให้ดาวน์โหลดไฟล์ js ที่ท้ายของคุณจากนั้นอ้างอิงไฟล์นั้น
Manisha Srivastava

ดีฉันเห็นว่ามันเป็นโฮสต์ออนไลน์ ... อย่างไรก็ตามขอบคุณฉันแก้ไขด้วย jquery.noConflict () เนื่องจากฉันมีสองรุ่น jquery ถูกใช้ในหน้าเดียวกัน
Prerit Mohan

@ User5590: ทุกที่ทุกเวลา :)
Manisha Srivastava

ไม่ควรใช้ jquery ที่ไม่ย่อเล็กสุดในการผลิต: ตรวจสอบcdnjs.comเช่น และใช้ HTTPS แทน
Takman

27

ฉันใช้โค้ดด้านล่างหลังจากรวมไฟล์ js แล้วและตอนนี้ก็ใช้งานได้แล้ว

<script src="js/jquery-ui.min.js" type="text/javascript"></script>
<script type="text/javascript">
    jQuery.browser = {};
    (function () {
        jQuery.browser.msie = false;
        jQuery.browser.version = 0;
        if (navigator.userAgent.match(/MSIE ([0-9]+)\./)) {
            jQuery.browser.msie = true;
            jQuery.browser.version = RegExp.$1;
        }
    })();
</script>

ลิงค์นี้การเชื่อมโยงให้ฉันผิด แต่ชิ้นเล็ก ๆ ของรหัสที่คุณเขียนช่วยให้ฉันมากขอบคุณคน
สมาน

7

นี่คือเครื่องมือ jQuery ข้อผิดพลาดบน GitHub คุณสามารถลองแผ่นแปะหนึ่งแผ่น

แก้ไข - มันดูไม่เหมือนว่า jQuery Tools ได้รับการสนับสนุนมากมาย โดยส่วนตัวฉันจะไม่เริ่มโครงการใหม่ด้วยการพึ่งพาห้องสมุดนั้นถ้าฉันไม่พร้อมที่จะรับการสนับสนุนตัวเอง


1
+1, jQuery Tools ยุ่งเหยิงไปหมดในช่วงไม่กี่ปีที่ผ่านมา การที่มันไม่ใช่ "การได้รับการสนับสนุนมาก" นั้นแม่นยำและพูดน้อยมาก ฉันคิดว่ามีเพียงหนึ่งการปรับปรุงเล็กน้อยตั้งแต่ jQuery 1.3 และไม่มีนักพัฒนาในช่วงสองสามปีที่ผ่านมาเช่นกัน
ปาร์

เห็นด้วยทุกคนมีคำแนะนำสำหรับห้องสมุดทดแทนหรือไม่ มีตัวเลื่อน scroller, overlay และ range range หรือเปล่า? ฉันหลีกเลี่ยง jQuery มือถือเพราะมันมีสไตล์มาก่อน ฉันเคยจัดสไตล์มาก่อนและมันเป็นฝันร้าย
อนินทรีย์

5
ฉันย้ายไปที่การค้นหาห้องสมุดน้อยที่สุดที่เขียนดีสำหรับแต่ละฟังก์ชั่นที่ฉันต้องการ เช่น: เลื่อนการป้อนข้อมูลช่วง: loopj.com/jquery-simple-slider , scroller / เลื่อน: bxslider.com ผมพบว่าการสนับสนุนที่ดีมากและมีขนาดเล็กและการปล่อยก๊าซโดยรวมหาห้องสมุดของแต่ละบุคคลเช่นนี้
jfeust

4

ฉันเพิ่งเพิ่ม

jQuery.browser = {
    msie: false,
    version: 0
};

หลังจากสคริปต์ jquery เพราะฉันไม่สนใจ IE อีกต่อไป


3

แทนที่ JS ของคุณด้วย

<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>

ลิงค์แหล่งที่มา


ในขณะนี้สำหรับ jquery 1.7+ jquery-ui ล่าสุดคือ:<link rel="stylesheet" href="https://stackoverflow.com//code.jquery.com/ui/1.12.0/themes/base/jquery-ui.css"> <script src="https://code.jquery.com/ui/1.12.0/jquery-ui.js"></script>
ช่างซ่อมนาฬิกา

0

ขณะที่ผมไม่ได้วางแผนที่จะสนับสนุนเก่ารุ่น MS IE ที่ทุกคนที่ผมเคยแทนที่อ้างอิงทั้งหมดไปด้วยbrowser.msie falseไม่ใช่วิธีแก้ปัญหาที่ดีฉันรู้ แต่ใช้งานได้สำหรับฉัน

(ที่จริงแล้วพวกเขาปรากฏเป็น!browser.msieซึ่งอาจถูกละเว้นจากเงื่อนไข)


0

ใช้เหมือนระเบิด

$(function (a) {

. . . . . จากนั้นในฟังก์ชันของคุณคุณสามารถใช้คุณสมบัติ msie เช่น

if (a.browser.msie) 
{
}
else 
{
   $(settings.current).after(Uploadelement);
}

โชคดี


0

ใช้เหมือนระเบิด

ฉันใช้คำสั่งนี้และแก้ไข

"Uncaught TypeError: ไม่สามารถอ่านคุณสมบัติ" msie "จากที่ไม่ได้กำหนด" ข้อผิดพลาด

if (/1\.(0|1|2)\.(0|1|2)/.test($.fn.jquery) || /^1.1/.test($.fn.jquery)) {
    return;
}

0

ฉันได้รับข้อผิดพลาดนี้ขณะใช้ JQuery 1.10 และ JQuery UI 1.8 ฉันสามารถแก้ไขข้อผิดพลาดนี้ได้โดยอัปเดตเป็น JQuery UI ล่าสุด 1.11.4

ขั้นตอนในการอัพเดต JQuery UI จาก Visual Studio:

  • นำทางไปยังโครงการหรือโซลูชัน
  • คลิกขวา: "จัดการแพคเกจ NuGet"
  • ทางด้านซ้ายให้คลิกที่แท็บ "แพ็คเกจที่ติดตั้ง"
  • ค้นหา "JQuery UI (ไลบรารีรวม)" และคลิกอัปเดต
  • หากพบให้เลือกและคลิกอัปเดต
  • หากไม่พบให้ค้นหาในแท็บ "ออนไลน์> nuget.org" ทางด้านซ้ายและคลิกติดตั้ง หาก Jquery UI เวอร์ชันเก่ายังคงมีอยู่ก็สามารถลบได้จากโครงการ

0

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

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