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

190

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

Uncaught TypeError: Cannot read property 'msie' of undefined

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

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

Colin747
источник
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;
    }
})();

Ссылка :

JrBriones
источник
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.

userlond
источник
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>

Ссылка на источник

Bugfixer
источник
На данный момент для jquery 1.7+ последняя версия jquery-ui:<link rel="stylesheet" href="https://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);
}

удачи

HamidSadeghi
источник
0

Используйте как удар

я использую эту команду и решаю

Ошибка «Uncaught TypeError: Невозможно прочитать свойство« msie »из неопределенного»

if (/1\.(0|1|2)\.(0|1|2)/.test($.fn.jquery) || /^1.1/.test($.fn.jquery)) {
    return;
}
Arezoo
источник
0

Я получал эту ошибку при использовании JQuery 1.10 и JQuery UI 1.8. Мне удалось устранить эту ошибку путем обновления до последнего пользовательского интерфейса JQuery 1.11.4.

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

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

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

Карлос UCR
источник