jquery 3.0 url.indexOf ошибка

Я получаю следующую ошибку от jQuery, как только она была обновлена ​​до v3.0.0,

jquery.js:9612 Uncaught TypeError: url.indexOf is not a function

Есть идеи почему?

4 ответа

Решение

Обновите весь ваш код, который звонит load функционировать как,

$(window).load(function() { ... });

к

$(window).on('load', function() { ... });

jquery.js:9612 Uncaught TypeError: url.indexOf не является функцией

Это сообщение об ошибке приходит от jQuery.fn.load функция.

Я столкнулся с той же проблемой в моем заявлении. После некоторого поиска я нашел это утверждение в блоге jQuery,

.load,.unload и.error, устаревшие с jQuery 1.8, больше не используются. Используйте.on() для регистрации слушателей.

Я просто изменяю, как мои объекты jQuery называют load функционировать как выше. И все работает как положено.

Лучший подход может быть такой, как это

jQuery.fn.load = function(callback){ $(window).on("load", callback) };

При этом вы можете оставить прежний код без изменений. Если вы используете веб-пакет, обязательно используйте скрипт-загрузчик.

Jquery 3.0 имеет некоторые критические изменения, которые удаляют определенные методы из-за конфликтов. Ваша ошибка, скорее всего, связана с одним из этих изменений, например удалением события.load().

Подробнее читайте в Руководстве по обновлению jQuery Core 3.0

Чтобы это исправить, вам нужно либо переписать код, чтобы он был совместим с Jquery 3.0, либо вы можете использовать плагин JQuery Migrate, который восстанавливает устаревшие и / или удаленные API и поведения.

Я столкнулся с той же ошибкой после обновления до последней версии JQuery. Поэтому я обновил файл jquery, над которым работал, как указано в предыдущем ответе, поэтому он сказал .on("load") вместо .load(),

Это исправление не очень стабильно, и иногда оно не работает для меня. Поэтому, чтобы решить эту проблему, вы должны обновить свой код с:

    .load();

в

    .trigger("load");

Я получил это исправление из следующего источника: https://github.com/stevenwanderski/bxslider-4/pull/1024

@choz ответ - правильный путь. Если у вас много применений и вы хотите убедиться, что он работает везде без изменений, вы можете добавить этот небольшой фрагмент миграции:

/* Migration jQuery from 1.8 to 3.x */
jQuery.fn.load = function (callback) {
    var el = $(this);

    el.on('load', callback);

    return el;
};

В этом случае у вас нет ошибок на других узлах, например, на $image как в ответе @Korsmakolnikov!

const $image = $('img.image').load(function() {
  $(this).doSomething();
});

$image.doSomethingElseWithTheImage();
Другие вопросы по тегам