Uncaught TypeError: Không thể đọc thuộc tính 'msie' của không xác định - Các công cụ jQuery


189

Tôi đang gặp lỗi sau trong bảng điều khiển Chrome dev:

Uncaught TypeError: Cannot read property 'msie' of undefined

Tôi hiểu rằng đó là vì .browserhiện không được chấp nhận trong jQuery tuy nhiên tôi đang sử dụng phiên bản mới nhất của các công cụ jQuery và nó vẫn báo lỗi, tôi đã kiểm tra trong jstệp và nó ở đó.

Làm thế nào tôi có thể khắc phục điều này để nó không gây ra lỗi?


1
lỗi này là không đủ Từ yếu tố nào bạn đang cố đọc nó từ đâu?
Siddharth Gupta

Tôi chưa sử dụng .browsermã của tôi. Dường như nó đang phát hiện nó trong tệp công cụ jQuery.
Colin747

6
Đối browsertượng không chỉ bị phản đối trong 1.9, nó đã biến mất . Nếu Công cụ jQuery vẫn đang sử dụng nó, thì Công cụ jQuery bị hỏng.
Mũi nhọn

1
@Alexander mà dường như thoát khỏi lỗi. Bạn có thể đặt một câu trả lời lên nếu bạn muốn.
Colin747

3
Các công cụ jQuery mới nhất chỉ được thử nghiệm với jQuery 1.7. jQuery 1.9 không tương thích với phiên bản mới nhất của Công cụ jQuery; nó đơn giản mà. Kết xuất công cụ jQuery hoặc hạ cấp jQuery xuống bất kỳ phiên bản nào dưới 1.9 hoạt động. Mặt khác, đừng mong đợi bất cứ ai cập nhật Công cụ jQuery, nó đã không có nhà phát triển trong vài năm qua.
Sparky

Câu trả lời:


188

Các $.browserphương pháp đã bị xóa vì jQuery 1.9.

jQuery.browser() removed

Các jQuery.browser()phương pháp đã bị phản đối kể từ jQuery 1.3 và được lấy ra trong 1.9. Nếu cần, nó có sẵn như là một phần của plugin Di chuyển jQuery. Chúng tôi khuyên bạn nên sử dụng tính năng phát hiện với một thư viện như Modernizr.

- Hướng dẫn nâng cấp jQuery Core 1.9 .

Như đã nêu trong Hướng dẫn nâng cấp, bạn có thể thử sử dụng plugin jQuery Migrate để khôi phục chức năng này và để Công cụ jQuery hoạt động.


242

Bạn có thể kiểm tra giải pháp này bằng AJ. Nó khá đơn giản, chỉ cần sao chép và dán các dòng mã sau đây.

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;
    }
})();

Tham khảo :


4
Điều này làm việc hoàn hảo! Nhưng tôi lấy nó nên được sử dụng như một bản vá, chứ không phải là một giải pháp phải không?
Jobokai

Cảm ơn, sử dụng một plugin jquery đang sử dụng cái này và đây là một giải pháp ngắn hạn dễ dàng cho đến khi một bản sửa lỗi thực sự ra mắt.
Joe Meyer

Cảm ơn. Công cụ truy vấn cố định v1.2.7 này, vì chúng tôi đã nâng cấp JQuery lên bản mới nhất.
bsentosa

1
WOW, nếu tôi có thể cho bạn 10 điểm cộng, tôi sẽ làm điều đó ngay bây giờ.
Iman Hejazi

9
Câu trả lời này không còn đúng nữa, vì IE11 không có mã thông báo MSIE trong userAgentchuỗi.
Dave Methvin

45

Sử dụng thẻ script sau trong tệp jsp / js của bạn:

<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>

Điều này sẽ làm việc chắc chắn.


đảm bảo bạn có kết nối internet Nếu bạn đang sử dụng ngoại tuyến thì hãy tải xuống tệp js ở cuối của bạn, sau đó giới thiệu tệp đó.
Manisha Srivastava

Chà tôi có thể thấy rằng nó được lưu trữ trực tuyến ... dù sao cũng cảm ơn tôi đã giải quyết nó bằng jquery.noConflict () vì tôi có hai phiên bản để jquery được sử dụng trên cùng một trang.
Trả lời Mohan

@ User5590: bất cứ lúc nào :)
Manisha Srivastava

Không nên sử dụng jquery không rút gọn trong sản xuất: ví dụ kiểm tra cdnjs.com . Và sử dụng HTTPS thay thế.
Takman

27

Tôi sử dụng mã dưới đây sau khi tập tin js bao gồm và nó đang hoạt động.

<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>

Liên kết liên kết này cho tôi lỗi, nhưng đoạn mã nhỏ này bạn đã viết giúp tôi rất nhiều, cảm ơn người đàn ông.
Saman

7

Đây là lỗi Công cụ jQuery trên GitHub . Bạn có thể thử một trong các bản vá.

chỉnh sửa - nó không nhìn vào tôi như thể Công cụ jQuery đang nhận được nhiều sự hỗ trợ. Cá nhân tôi sẽ không bắt đầu một dự án mới với sự phụ thuộc vào thư viện đó trừ khi tôi sẵn sàng tiếp nhận hỗ trợ bản thân.


1
+1, Công cụ jQuery đã là một mớ hỗn độn trong vài năm qua. Đó không phải là "nhận được nhiều sự hỗ trợ" là rất chính xác và là một sự thiếu hụt lớn. Tôi nghĩ rằng chỉ có một bản cập nhật nhỏ kể từ jQuery 1.3 và không có nhà phát triển nào trong vài năm qua.
Sparky

Đồng ý, có ai có một đề nghị cho một thư viện thay thế? Một cái gì đó với một thanh cuộn, lớp phủ và thanh trượt đầu vào phạm vi? Tôi tránh jQuery di động vì nó được tạo kiểu sẵn. Tôi đã tạo kiểu cho nó trước đây và đó là một cơn ác mộng.
inorganik

5
Tôi đã chuyển sang chỉ tìm các thư viện tối thiểu được viết tốt cho từng chức năng tôi muốn. tức là: thanh trượt đầu vào phạm vi: loopj.com/jquery-simple-slider , thanh cuộn / thanh trượt: bxslider.com . Tôi tìm thấy sự hỗ trợ tốt hơn nhiều và tổng thể dấu chân nhỏ hơn tìm các thư viện riêng lẻ như thế này
jfeust

4

Tôi chỉ cần thêm

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

sau tập lệnh jquery, vì tôi không quan tâm đến IE nữa.


3

Thay thế JS của bạn bằng

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

Liên kết nguồn


Tại thời điểm cho jquery 1.7+ jquery-ui mới nhất là:<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>
đồng hồ

0

Vì tôi không có kế hoạch hỗ trợ các phiên bản MS IE cũ, tôi chỉ đơn giản là thay thế tất cả các tham chiếu browser.msiebằng false. Không phải là một giải pháp tốt, tôi biết, nhưng nó hiệu quả với tôi.

(Trên thực tế, chúng xuất hiện như !browser.msie, có thể được bỏ qua từ các điều kiện.)


0

Dùng như thổi

$(function (a) {

. . . . .then trong chức năng của bạn, bạn có thể sử dụng thuộc tính msie như

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

chúc may mắn


0

Dùng như thổi

tôi sử dụng lệnh này và giải quyết

"Uncaught TypeError: Không thể đọc thuộc tính 'msie' của không xác định" Lỗi

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

0

Tôi đã gặp lỗi này khi sử dụng JQuery 1.10 và JQuery UI 1.8. Tôi đã có thể khắc phục lỗi này bằng cách cập nhật lên JQuery UI 1.11.4 mới nhất.

Các bước để cập nhật giao diện người dùng JQuery từ Visual Studio:

  • Điều hướng đến Dự án hoặc Giải pháp
  • Nhấp chuột phải: "Quản lý gói NuGet"
  • Ở bên trái, nhấp vào tab "Gói đã cài đặt"
  • Tìm "Giao diện người dùng JQuery (Thư viện kết hợp)" và bấm Cập nhật
  • Nếu tìm thấy, chọn nó và nhấp vào Cập nhật
  • Nếu không tìm thấy, hãy tìm nó trong tab "Trực tuyến> nuget.org" ở bên trái và nhấp vào cài đặt. Nếu phiên bản cũ của phiên bản UI Jquery vẫn còn tồn tại, nó có thể bị xóa khỏi dự án

0

Nếu bạn đã xác định jQuery hai lần, thì bạn có thể gặp lỗi này. Ví dụ: nếu bạn đang làm việc với Primefaces (nó đã bao gồm jQuery) và bạn xác định nó ở nơi khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.