Uncaught TypeError: Неможливо прочитати властивість 'msie' невизначених - інструментів jQuery


190

Я отримую таку помилку в консолі розробника Chrome:

Uncaught TypeError: Cannot read property 'msie' of undefined

Я розумію, що це тому .browser, що тепер застаріло в jQuery, проте я використовую останню версію інструментів jQuery, і вона все ще видає помилку, я перевірив у jsфайлі, і він там є.

Як я можу обійти це, щоб не помилитися?


1
ця помилка недостатня. З якого елемента ви намагаєтесь прочитати це?
Сіддхарт Гупта

Я взагалі не використовував .browserу своєму коді. Здається, його виявляють у файлі інструментів jQuery.
Colin747

6
browserОб'єкт не тільки засуджується в версії 1.9, він пішов . Якщо інструменти jQuery все ще використовують його, тоді jQuery Tools порушено.
Pointy

1
@ Олександр, який, здавалося, позбувся помилки. Ви можете поставити відповідь, якщо хочете.
Colin747

3
Останні інструменти jQuery перевірені лише за допомогою jQuery 1.7. jQuery 1.9 не сумісний з останньою версією інструментів jQuery; це так просто. Дамп інструменти jQuery або зменшення jQuery до будь-якої версії нижче 1.9, яка працює. В іншому випадку не сподівайтеся, що хтось оновлюватиме інструменти jQuery, це було без розробника останні кілька років.
Спаркі

Відповіді:


189

$.browserМетод був видалений в JQuery 1.9.

jQuery.browser() removed

jQuery.browser()Метод є застарілим з JQuery 1.3 і віддаляється в 1.9. Якщо потрібно, він доступний у складі плагіна jQuery Migrate. Ми рекомендуємо використовувати функцію виявлення функцій у такій бібліотеці, як Modernizr.

- Посібник з оновлення jQuery Core 1.9 .

Як зазначено в Посібнику з оновлення, ви можете спробувати використовувати плагін jQuery Migrate, щоб відновити цю функціональність і дозволити роботі інструментів jQuery.


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
Це працює ідеально! Але я вважаю, що це слід використовувати як патч, а не рішення?
Джобокай

Дякуємо, використовуючи плагін jquery, який використовував це, і це було простим короткостроковим рішенням, поки не вийде справжнє виправлення.
Джо Мейєр

Дякую. Це виправлено інструменти запитів v1.2.7, оскільки ми оновили JQuery до останнього.
bsentosa

1
WOW, Якби я міг тобі дати 10 плюсів, я зроблю це прямо зараз.
Іман Хеджазі

9
Ця відповідь більше не є правильною, оскільки IE11 не має маркера MSIE в userAgentрядку.
Дейв Метвін

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 використовувався на одній сторінці.
Прерит Мохан

@ User5590: у будь-який час :)
Manisha Srivastava

Не слід використовувати нескорочені jquery у виробництві: перевірте, наприклад, cdnjs.com . І замість цього використовуйте HTTPS.
Такман

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 Tools на GitHub . Ви можете спробувати один з пластирів.

редагувати - на мене це не виглядає так, ніби інструменти jQuery отримують велику підтримку. Я особисто не почав би новий проект із залежністю від цієї бібліотеки, якби я не був готовий взяти на себе підтримку.


1
+1, інструменти jQuery протягом останніх кількох років були повним безладом. Це не дуже "підтримка" - це дуже точно і заниження. Я думаю, що з jQuery 1.3 було лише одне незначне оновлення, а останніх років також немає жодного розробника.
Спаркі

Погоджено, чи має хтось рекомендацію щодо заміни бібліотеки? Щось із прокруткою, повзунком та повзунком введення діапазону? Я уникаю jQuery mobile, тому що він попередньо стилізований. Я вже це стилював, і це кошмар.
inorganik

5
Я перейшов до того, щоб просто знайти добре написані мінімальні бібліотеки для кожної функції, яку я хочу. тобто: повзунок вводу діапазону: loopj.com/jquery-simple-slider , скроллер / слайдер: 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' undefined" Помилка

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

Кроки для оновлення інтерфейсу JQuery від Visual Studio:

  • Перейдіть до проекту чи рішення
  • Клацніть правою кнопкою миші: "Управління пакетами NuGet"
  • Ліворуч натисніть на вкладку "Встановлені пакети"
  • Знайдіть "JQuery UI (Комбінована бібліотека)" та натисніть кнопку "Оновити"
  • Якщо знайдено, виберіть його та натисніть кнопку Оновити
  • Якщо його не знайдено, знайдіть його на вкладці "Інтернет> nuget.org" зліва та натисніть "Встановити". Якщо стара версія версії інтерфейсу Jquery все ще існує, її можна видалити з проекту

0

Якщо у вас jQuery визначено двічі, ви можете отримати цю помилку. Наприклад, якщо ви працюєте з Primefaces (він вже включає jQuery) і ви визначаєте його в іншому місці.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.