Uncaught TypeError: Невозможно прочитать свойство 'msie' из неопределенного - jQuery tools


190

Я получаю следующую ошибку в консоли Chrome dev:

Uncaught TypeError: Cannot read property 'msie' of undefined

.browserНасколько я понимаю, это потому, что теперь в jQuery устарела, однако я использую последнюю версию инструментов jQuery, и она по-прежнему выдает ошибку, я проверил jsфайл и он там.

Как я могу обойти это, чтобы он не выдавал ошибку?


1
этой ошибки недостаточно. Из какого элемента вы пытаетесь это прочитать?
Сиддхарт Гупта

Я не использовал .browserв своем коде вообще. Кажется, это обнаруживается в файле инструментов jQuery.
Colin747

6
browserОбъект не только осуждается в версии 1.9, он ушел . Если jQuery Tools все еще использует его, то jQuery Tools не работает.
Заостренный

1
@ Александр, который, казалось, избавился от ошибки. Вы можете поставить ответ, если хотите.
Colin747

3
Последние инструменты jQuery были протестированы только с jQuery 1.7. jQuery 1.9 не совместим с последней версией jQuery Tools; это так просто. Дамп jQuery Tools или понизьте jQuery до любой версии ниже 1.9, которая работает. В противном случае, не ожидайте, что кто-нибудь обновит jQuery Tools, последние несколько лет он был без разработчика.
Sparky

Ответы:


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, который использовал это, и это было простым краткосрочным решением, пока не появилось реальное исправление.
Джо Мейер

Спасибо. Это исправило Query Tools v1.2.7, так как мы обновили JQuery до последней версии.
bsentosa

1
ВАУ, если бы я мог дать вам 10 плюсов, я сделаю это прямо сейчас.
Иман Хеджази

9
Этот ответ больше не является правильным, поскольку IE11 не имеет токена MSIE в userAgentстроке.
Дейв Метвин,

47

Используйте следующий тег script в вашем файле 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 на своем конце, а затем обратитесь к этому файлу.
Маниша Шривастава

Ну, я вижу, что он размещен в Интернете ... в любом случае, спасибо, я решил это с помощью jquery.noConflict (), так как у меня было две версии для jquery, используемых на одной странице.
Прерит Мохан

@ User5590: в любое время :)
Маниша Шривастава

Не следует использовать не минимизированный 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 Tools получает большую поддержку. Лично я не начал бы новый проект с зависимости от этой библиотеки, если бы не был готов взять на себя поддержку.


1
+1, jQuery Tools был полным беспорядком в течение последних нескольких лет. То, что это не «получает большую поддержку», очень точно и огромное преуменьшение. Я думаю, что с jQuery 1.3 было только одно небольшое обновление, и за последние пару лет не было ни одного разработчика.
Sparky

Согласен, у кого-нибудь есть рекомендации по замене библиотеки? Что-то с ползунком прокрутки, оверлея и диапазона ввода? Я не использую jQuery для мобильных устройств, потому что он поставляется в предустановленном стиле. Я разработал его раньше, и это кошмар.
неорганик

5
Я перешел к поиску хорошо написанных минимальных библиотек для каждой функции, которую я хочу. т.е.: бегунок ввода диапазона: loopj.com/jquery-simple-slider , скроллер / слайдер: bxslider.com . Я нахожу гораздо лучшую поддержку и, в целом,
занимаю

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

Шаги по обновлению пользовательского интерфейса JQuery из Visual Studio:

  • Перейдите к проекту или решению
  • Щелкните правой кнопкой мыши: «Управление пакетами NuGet»
  • Слева, нажмите на вкладку «Установленные пакеты»
  • Найдите «JQuery UI (Объединенная библиотека)» и нажмите «Обновить».
  • Если найдено, выберите его и нажмите Обновить
  • Если он не найден, найдите его на вкладке «Online> nuget.org» слева и нажмите «Установить». Если старая версия версии Jquery UI все еще существует, ее можно удалить из проекта

0

Если вы определили jQuery дважды, вы можете получить эту ошибку. Например, если вы работаете с Primefaces (он уже включает в себя jQuery), и вы определяете его в другом месте.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.